如果我尝试在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 '%.%';