1

如果我尝试在 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 与通常不同?

4

3 回答 3

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

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

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

于 2011-12-07T01:06:28.193 回答
1

正如@cen已经提到的,字符集可能会导致该问题。我有这个样本:

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

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

所以,当我试图用这封电子邮件获取对象时,我无法得到它。

于 2015-07-31T15:36:10.570 回答
0

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

 SELECT * FROM test WHERE `username` LIKE '%.%';
于 2014-12-03T12:49:51.653 回答