在mysql中,以下查询将返回1
select "Khur Ramābād"="Khur Ramabad"
因此在mysql中a和ā之间没有区别。但a = 97的ascii码和ā= 196的ascii码。
是否可以为其他语言定义相同的东西?例如,在波斯语中的“ی”和“ي”是具有不同字符代码的相同字符,某些键盘布局使用“ی”,而另一些键盘使用“ي”。
我知道我可以在应用程序端对其进行控制,并在其中将所有ي替换为ی,但这不适用于所有字符。例如“آ”和ا相同,但不能互相替换。
我的问题不是字符集。我已经在使用utf8。正如我在拉丁文中所说,如果您搜索“ Khur Ramabad”并且您的字段包含“ KhurRamābād”,则mysql将返回结果,但在波斯语中,如果您具有“نارنجی”并搜索“نارنجي”,则不会返回任何内容,因为“ ی”和“ي”必须具有不同的字符代码。
我的问题不是字符集。我已经在使用utf8。正如我在拉丁文中所说,如果您搜索“ Khur Ramabad”并且您的字段包含“ KhurRamābād”,则mysql将返回结果,但在波斯语中,如果您具有“نارنجی”并搜索“نارنجي”,则不会返回任何内容,因为“ ی”和“ي”具有两个不同的字符代码。
您问的问题是关于排序规则。MySQL认为您的两个罗马字符名称相等,因为它使用COLLATE utf8_general_ci
(或者可能是utf8_swedish_ci
; MySQL的根源在瑞典)作为默认排序规则。该排序规则认为带重音符和不带重音符是相等的。
不幸的是,utf8_persian_ci
排序规则似乎没有考虑您显示的两个替代字符相等。
请参阅此处的一些SQL,它可以比较文本字符串的各种版本,并显示它们是否相等。http://sqlfiddle.com/#!8/eeff3/1/0
我对波斯语一无所知,所以我不能说这是否意味着排序规则有缺陷。但这可能是。如果是这样,您应该向https://bugs.mysql.com/提交缺陷报告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句