MySQL查询在字符串中搜索带点(.)的值时返回0行



如果我尝试在mysql数据库中搜索值,字符串值中包含点,查询返回0行。例子:

SELECT * FROM table WHERE `username`='marco.polo'  --> 0 rows
SELECT * FROM table WHERE `username` LIKE '%.polo%'  --> 0 rows
SELECT * FROM table WHERE `username` LIKE 'polo'  --> Success

在将服务器和数据库移到另一个地方后出现。我知道点是一组扩展正则表达式,但它不应该适用于相等或LIKE操作符,因为我没有在查询中使用REGEXP。

我已经在本地数据库上测试了相同的查询,它工作得很好。在mysql中是否会有一个特殊的设置来区别对待点?

user1084605,我试图复制这个问题(使用MySQL版本5.1.37),但得到了完全相反的结果。见下文:

mysql> create table test (username varchar(100));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test values ('marco.polo');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test WHERE `username`='marco.polo';
+------------+
| username   |
+------------+
| marco.polo | 
+------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM test WHERE `username` LIKE '%.polo%';
+------------+
| username   |
+------------+
| marco.polo | 
+------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM test WHERE `username` LIKE 'polo';
Empty set (0.00 sec)

根据MySQL文档,使用LIKE操作符时唯一的特殊字符是"%"(百分比:匹配0、1或多个字符)和"_"(下划线:匹配一个且仅一个字符)。http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

"。"(period)对于MySQL的REGEXP操作符确实有特殊的含义,但它仍然应该匹配列中的文字句点。http://dev.mysql.com/doc/refman/5.0/en/regexp.html

你能复制我上面运行的SQL语句并粘贴你的结果吗?

@cen已经提到,字符集会导致这个问题。我有这个样品:

`email` VARCHAR(45) CHARACTER SET 'armscii8' NOT NULL,

这是在。sql转储,我收到。

当我试图用这个邮件获取对象时

下面的查询处理了当列中只有DOT运算符时的场景。

 SELECT * FROM test WHERE `username` LIKE '%.%';

相关内容

  • 没有找到相关文章

最新更新