我有一个数据库表,列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'
为什么我会得到不同的结果,两个语句都不应该返回行吗?
答案 0 :(得分:1)
LIKE
运算符按字符执行匹配字符。当然,Große
和Grosse
的长度甚至不相等,因此无法匹配。
尝试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'='ß'
- >假的。