Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询在搜索字符串中带点(.)的值时返回0行_Mysql_Select_Row_Setting - Fatal编程技术网

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 这是在将服务器和数

如果我试图在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是一组扩展正则表达式,但它不应该应用于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之后,一切都开始工作了。无论如何,谢谢你的帮助!