使用utf8_unicode_ci索引时,为什么=与LIKE不同?

时间:2013-04-12 11:21:51

标签: mysql collation equality sql-like

我有一个数据库表,列name定义为VARCHAR(255) COLLATE utf8_unicode_ci,带有唯一索引。它包含名称"Grosse"

以下语句不返回任何行:

SELECT name FROM authors WHERE name LIKE 'Große' COLLATE 'utf8_unicode_ci'

我在添加COLLATE时都尝试过(可能没有必要)。

以下语句返回正确的行:

SELECT name FROM authors WHERE name = 'Große' 

为什么我会得到不同的结果,两个语句都不应该返回行吗?

1 个答案:

答案 0 :(得分:1)

LIKE运算符按字符执行匹配字符。当然,GroßeGrosse的长度甚至不相等,因此无法匹配。

尝试SELECT 'ß' LIKE 'ss' COLLATE 'utf8_unicode_ci',您将收到'false'(0)

尝试SELECT 'ß' = 'ss' COLLATE 'utf8_unicode_ci',您将收到'true'(1)

同样的行为适用于whtpaces btw:

'x' LIKE 'x '将不匹配,而'x'='x '将匹配。

请注意,mysql中的= ==具有相同意义的任何编程语言。 mysql中的=具有.equal()的含义。如果您想 mime 编程语言==,您应该执行二进制比较:SELECT BINARY 'ss'='ß' - >假的。