免责声明:
数据库ut8mb4_unicode_520_ci
表字段ut8mb4_unicode_520_ci
如何正确查询包含dakuten或handakuten日语字符的表字段?Dakuten。
目前,即使查询是为tenten版本运行的,基本字符似乎也会返回。
示例数据
给定へ
和ぺ
。
一行ID: 199, post_title: 'へ';
情景1
运行:
SELECT 'へ' = 'ぺ';
-- Returns 0. Correct
情景2
运行:
SELECT ID, post_title
FROM wp_posts
WHERE post_title = 'へ';
-- Returns row 199. Correct
情景3
但是,由于某种原因,当我运行这个查询时,它仍然返回记录199,并注意到不同的标题值。
运行:
SELECT ID, post_title
FROM wp_posts
WHERE post_title = 'ぺ';
-- Returns row 199. Incorrect
示例图像
一张图片可以更好地解释(我只是使用union来更好地在一个屏幕截图中显示所有内容):
有没有一个坚实的方法来处理这些字符?所有其他的日语字符似乎都工作得很好,只是dakuten版本被当作它们的基本查询。
最佳答案
这是因为您使用的排序规则(utf8mb4_unicode_ci、utf8mb4_unicode_520_ci和utf8mb4_0900_ai_ci)只比较字符的基字母。例如,“ぺ”=“へ”+U+309A◌゚,“へ”是“ぺ”的基字母。因此,对于您的情况,所有3个字符的基音字母都是相同的。所以对于那些返回“1”的排序规则来说,这是正确的结果。
MySQL团队正在为utf8mb4字符集开发一个新的日语排序规则。它将区分这些达肯字符和基础字符。很快就会来的。