3

我有一个数据库表,其列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' 

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

4

1 回答 1

1

LIKE操作员逐个字符地执行匹配。当然GroßeGrosse长度甚至不相等,所以无法匹配。

试一试SELECT 'ß' LIKE 'ss' COLLATE 'utf8_unicode_ci',你会收到'假'(0)

尝试SELECT 'ß' = 'ss' COLLATE 'utf8_unicode_ci',您将收到“真实”(1)

顺便说一句,同样的行为适用于空格:

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

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

于 2013-04-12T11:52:35.520 回答