unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度相关的知识,希望对你有一定的参考价值。
unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度, 请详细作答,答得好,再给最高上限分.
先谢过
他们不区分大小写的,一个汉字一个编码。共6万多个汉字没有重复编码的,包括繁难偏僻的汉字在内。
假名重音什么的这些字体或符号是单独编码的,在一个语言里有音调或重音什么的,都在这个语言字体的后面另外加有的。如骂这个字的拼音是m加上a再加上去掉字符,共三个字组成的。 参考技术A 问题问的很笼统,一般的重音,假名,全角,半角都是由不同的字符(内码)代表的,unicode的排序没什么规律,但是每个国家的编码都有包括,其中的汉字部分称为“CJK统一汉字”(C指中国,J指日本,K指朝鲜),从0x4e00开始。
MySQL / MariaDB 不区分大小写的排序规则仍然区分大小写吗?
【中文标题】MySQL / MariaDB 不区分大小写的排序规则仍然区分大小写吗?【英文标题】:MySQL / MariaDB Case Insensitive Collation Still Case Sensitive? 【发布时间】:2019-06-19 11:08:18 【问题描述】:使用 MariaDB 10.0.36,我有一个用户表,其排序规则为 utf8_turkish_ci
和一个 user_login
列,该列存储用户的用户名,该用户名也使用具有唯一索引的 utf8_turkish_ci
排序规则。
我的理解是 select 语句应该不区分大小写,但对于某些用户名似乎不是这样。
例如,我有一个用户登录为GoDoIt
此语句不返回任何记录:
SELECT * FROM user WHERE user_login = 'godoit'
但是,这是可行的:
SELECT * FROM user WHERE user_login = 'GoDoIt'
我觉得这很奇怪,因为Eric
的用户名可以双向使用。
SELECT * FROM user WHERE user_login = 'eric'
SELECT * FROM user WHERE user_login = 'Eric'
返回相同的结果。那么为什么字符串中间的大写字母不起作用呢?在将字符串发送到数据库之前,我在字符串上使用 tolower
降低了 PHP 中的输入用户名,我猜这种方法不适用于某些用户名。
【问题讨论】:
这与“案例”无关。 【参考方案1】:土耳其语 dotless I 和 dotted i 是两个独立的字符;在 utf8_turkish_ci
排序规则中,它们不被认为是相等的。
在此处查看整理表:http://collation-charts.org/mysql60/mysql604.utf8_turkish_ci.html
注意无点 I 和带点 i 的单独条目。
其他背景:https://en.wikipedia.org/wiki/Dotted_and_dotless_I
【讨论】:
天哪...我一直在使用错误的排序规则。【参考方案2】:(评论太长。斯宾塞的回答很好。)
This 列出了相等或不相等的字母和状态,以及它们的顺序。以下摘录显示无点的 I 彼此相等,但被认为小于带点的 I:
utf8_turkish_ci I=ı Ħ=ħ i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ ij=IJ=ij iz J=j=j́=Ĵ=ĵ jz
utf8_turkish_ci
的其他一些不寻常之处:Ö=ö
- 被视为 O 和 P 之间的“字母”。Ç=ç 和 Ğ=ğ
和 Ş=ş
也是如此
注意:utf8mb4 和 utf8 处理土耳其语的方式相同。
MySQL 6.0 几年前就死了;相对于Ş
,排序规则的链接似乎已过期:
mysql> SELECT 'Ş' = 'S' COLLATE utf8_turkish_ci;
+------------------------------------+
| 'Ş' = 'S' COLLATE utf8_turkish_ci |
+------------------------------------+
| 0 |
+------------------------------------+
【讨论】:
以上是关于unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度的主要内容,如果未能解决你的问题,请参考以下文章