9

我有一个非常奇怪的行为,我在我的 SQL 数据库中无法理解(我使用的是 MySQL 5.5.8):

我在一个表中有一个 varchar(10) 一个名字:joe。

如果运行这样的sql:

SELECT ID FROM `names` WHERE `name` = 'joe '

我得到一个结果:乔,但这是错误的,因为在表中我没有任何“乔”(最后有一个空格。我只有“乔”(没有空格)

但是,如果我执行:

SELECT ID FROM `names` WHERE `name` LIKE 'joe '

我得到了我所期望的:什么都没有。据我所知,= 应该是“精确”匹配,而 like 更松散以便能够将它与子字符串和 % 一起使用。

我错过了什么?

4

2 回答 2

11

CHAR尾随空格对于使用或VARCHAR比较不重要=。请参阅字符串比较函数

特别是,尾随空格很重要,这对于使用 = 运算符执行的 CHAR 或 VARCHAR 比较而言并非如此:

mysql> SELECT 'a' = 'a ', 'a' LIKE 'a ';
+------------+---------------+
| 'a' = 'a ' | 'a' LIKE 'a ' |
+------------+---------------+
|          1 |             0 |
+------------+---------------+
1 row in set (0.00 sec)
于 2013-02-25T16:22:29.360 回答
0

我相信这是因为您使用的数据类型。

CHAR 和 VARCHAR 类型相似,但它们的存储和检索方式不同。从 MySQL 5.0.3 开始,它们在最大长度和是否保留尾随空格方面也有所不同。

http://dev.mysql.com/doc/refman/5.0/en/char.html

于 2013-02-25T16:22:41.703 回答