【问题标题】:Why is = different from LIKE when using utf8_unicode_ci index?为什么在使用 utf8_unicode_ci 索引时 = 与 LIKE 不同?
【发布时间】:2013-04-12 11:21:51
【问题描述】:

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

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

【问题讨论】:

    标签: mysql collation equality sql-like


    【解决方案1】:

    LIKE 运算符逐个字符地执行匹配。当然GroßeGrosse的长度甚至不相等,所以不能匹配。

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

    试试SELECT 'ß' = 'ss' COLLATE 'utf8_unicode_ci',你会收到'true' (1)

    同样的行为也适用于空格:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多