首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL 5.5中可以使用什么排序规则来对日语字符进行排序?

在MySQL 5.5中可以使用什么排序规则来对日语字符进行排序?
EN

Stack Overflow用户
提问于 2021-10-18 09:22:29
回答 1查看 252关注 0票数 0

我有一个带有utf8mb4字符集的数据库,我一直试图选择数据在日本字符中的记录,但是utf8mb4_general_ci排序规则似乎无法正确地排序结果。例如,下面的字符按desc顺序显示:

小松児玉

当它应该是:

児玉小松

EN

回答 1

Stack Overflow用户

发布于 2021-10-18 09:58:30

好吧,对于那些可能在这种情况下结结巴巴的人来说。这是我找到的解决办法。所以,我读了这篇文章

MySQL 5.5常见问题: MySQL中文、日语和韩文字符集

我会在这里贴上上面写的片段:

代码语言:javascript
运行
复制
    mysql> SELECT * FROM tj WHERE s1 = 'か';
    +------+
    | s1   |
    +------+
    | が  |
    | か  |
    +------+
2 rows in set (0.00 sec)

第一个结果行中的字符不是我们搜索的字符。为什么MySQL要取回它?首先,我们查找Unicode代码点值,它可以通过读取字符的ucs2版本的十六进制数字来实现:

代码语言:javascript
运行
复制
mysql> SELECT s1, HEX(CONVERT(s1 USING ucs2)) FROM tj;
+------+-----------------------------+
| s1   | HEX(CONVERT(s1 USING ucs2)) |
+------+-----------------------------+
| が  | 304C                        |
| か  | 304B                        |
+------+-----------------------------+
2 rows in set (0.03 sec)

现在,我们在4.0.0 allkeys表中搜索304 B和304 C,并找到以下行: 304 B;.1E57.0020.000E.304B # HIRAGANA字母KA 304 C;.1E57.0020.000E.304B # HIRAGANA字母GA;QQCM --官方的Unicode名称(跟随“#”标记)告诉我们日语音节(Hiragana)、非正式分类(字母、数字或标点符号)和西方标识符(KA或GA,它们恰好是同一字母对的发音和清音成分)。更重要的是,两行的主权重(方括号内的第一个十六进制数)为1E57。对于搜索和排序中的比较,MySQL只注意主权重,忽略了所有其他数字。这意味着我们正在根据Unicode规范正确地对が和か进行排序。如果我们想要区分它们,就必须使用非UCA (Unicode排序算法)排序规则(utf8_bin或utf8_general_ci),或者比较HEX()值,或者使用s1进行转换(s1使用sjis)。当然,“根据Unicode”是正确的是不够的:提交错误的人也是一样的正确。我们计划根据JIS 4061标准为日语添加另一个排序规则,在该标准中,像KA/GA这样的浊音/清音字母对是可以区分的。

正如这篇文章所建议的,我使用“(s1使用sjis)”来解决我的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69613658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档