MySQL查询在搜索字符串中带点(.)的值时返回0行
如果我试图在mysql数据库中搜索一个值,而字符串值中包含点,则查询返回0行。例如:MySQL查询在搜索字符串中带点(.)的值时返回0行,mysql,select,row,setting,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 这是在将服务器和数
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是一组扩展正则表达式,但它不应该应用于equal或LIKE运算符,因为我在查询中不使用REGEXP
我在本地数据库上测试了相同的查询,效果很好。
mysql中是否有一个特殊的设置,它对dot的处理与通常不同?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或多个字符)和“\”(下划线:匹配一个且仅匹配一个字符)。
“.”(句点)对MySQL的REGEXP运算符有特殊意义,但它仍应与列中的文字句点匹配。
您能否复制我在上面运行的SQL语句,并将结果粘贴到回复中?下面的查询处理了列中只有点运算符的情况
SELECT * FROM test WHERE `username` LIKE '%.%';
正如@已经提到的,字符集可能导致该问题。
我有这个样本:
`email` VARCHAR(45) CHARACTER SET 'armscii8' NOT NULL,
这是在我收到的.sql转储中
所以,当我试图用这封电子邮件获取对象时
我无法获取它。经过数小时的调试,我发现表的默认字符集是亚美尼亚语(创建数据库时,创建者可能没有注意,因此选择了列表中的第一个字符)。在运行了一些ALTER语句并更改为utf8之后,一切都开始工作了。无论如何,谢谢你的帮助!