MySQL的排序规则英语,波兰语和德语

问题描述 投票:0回答:2

在我的笨项目我使用的MySQL数据库。它的排序规则是“latin1_swedish_ci”。现在我需要扩展我的网站存储“波兰”,“德国”,“法国”,“乌克兰”,除了“英语”“荷兰”。但我不知道要使用哪个归类。我发现在网络上不同的语言不同的答案。但我需要一个通用的。请帮我找出一个解决方案。

mysql collation
2个回答
1
投票

(阿尔瓦罗的回答是好。我加入了一些注释)

如果你正在使用MySQL 5.5或5.6,并有VARCHAR(255),看到this你可能会遇到一些问题。

ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;

(每个表)可能是转换为UTF-8的最简单方法。注意:从生产独立测试,并且测试西欧文字没有得到错位。如果你得到乱码或问号,看this

在转换到CHARACTER SET utf8mb4,优选的是COLLATION utf8mb4_unicode_520_ci。 (用MySQL,8.0,有一个更好的。)

utf8mb4会让你处理世界上所有的语言,所以这应该是最后的“转换”必要的。


1
投票

关心排序之前,需要迁移到一个Unicode兼容的编码第一。正如其名称所暗示,拉丁语1 *是专为拉丁文字和不能编码所有的波兰字符,当然,没有西里尔脚本。在2019年显而易见的选择是UTF-8,其对应在MySQL术语来utf8mb4

但是要注意,这可能不是小事。如果您的应用程序承担了单字节编码任何文本操作功能可能需要进行审查,也许固定。例如, symbol对Windows 1252 1个字节的长度,但它在UTF-8 3个字节。比方说,你有一个像从1929年0.92€字符串”去掉它的代码。如果你的应用程序中删除最后一个字节,代码是在一个单字节编码工作完美无缺将不再是在一个多字节编码有效的,因为一个字节是不是一个字符了。或者说,即使是在MySQL的本身,一些简单的regular expressions并不多字节的安全,直到MySQL的8.0.4。

一旦你解决这个问题,你需要选择一个适当的归类。既然你混合的语言,你需要一个通用的Unicode之一。这里的a good overview

(*)的MySQL实际上是骗你的。当它说的Latin-1,它实际上指的Windows 1252。

© www.soinside.com 2019 - 2024. All rights reserved.