在字符串中使用点(。)搜索值时,MySQL查询返回0行

时间:2011-12-07 00:30:10

标签: mysql select row setting

如果我尝试在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

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

我在我的本地数据库上测试了相同的查询,它运行正常。 可能在mysql中有一个特殊的设置,以不同的方式处理dot吗?

3 个答案:

答案 0 :(得分:1)

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

A“。” (句点)对MySQL的REGEXP运算符有特殊含义,但它仍应匹配列中的文字句点。 http://dev.mysql.com/doc/refman/5.0/en/regexp.html

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

答案 1 :(得分:1)

如上所述, @ cen ,字符集可能会导致该问题。 我有这个样本:

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

这是在我收到的.sql转储中。

所以,当我尝试使用此电子邮件获取对象时 我无法得到它。

答案 2 :(得分:0)

当我们在列中只有 DOT 运算符时,以下查询会处理这种情况。

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