MySQL排序规则,用于存储未知语言的多语言数据

时间:2010-11-26 19:18:48

标签: mysql unicode multilingual

我是多语言数据的新手,我的承认是我之前从未尝试过。 目前我正在开发一个多语言网站,但我不知道将使用哪种语言。

我应该使用哪种MySQL校对/字符集来实现这一目标?

我应该使用某种Unicode类型的字符集吗?

当然,这些语言不属于这个世界,这些语言必须在我们最常使用的集合中。

3 个答案:

答案 0 :(得分:17)

您应该使用Unicode排序规则。您可以在系统或表的每个字段上默认设置它。有以下Unicode排序规则名称,这是它们的区别:

utf8_general_ci是一个非常简单的排序规则。它只是 - 删除所有重音 - 然后转换为大写 并使用此类“基本字母”结果字母的代码进行比较。

utf8_unicode_ci使用默认的Unicode排序规则元素表。

主要区别是:

  1. utf8_unicode_ci支持所谓的扩展和连字,例如:德语字母ß(U + 00DF LETTER SHARP S)在“ss”附近排序。字母Œ(U + 0152 LATIN CAPITAL LIGATURE OE)在“OE”附近排序。< / LI>

    utf8_general_ci不支持扩展/连字,它将所有这些字母排序为单个字符,有时排序错误。

    1. utf8_unicode_ci 通常对所有脚本更准确。例如,在西里尔语块上:utf8_unicode_ci适用于所有这些语言:俄语,保加利亚语,白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语。虽然utf8_general_ci仅适用于俄罗斯和保加利亚语的西里尔语。白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语中使用的额外字母排序不佳。
    2. +/- utf8_unicode_ci的缺点是它比utf8_general_ci慢一点。

      因此,如果您知道或不知道您将使用哪些特定语言/字符,我建议您使用覆盖范围更广的utf8_unicode_ci。

        

      摘自MySQL forums

答案 1 :(得分:1)

UTF-8包含大多数语言,这是您最安全的选择。但是,也有例外情况,您需要确保要覆盖的所有语言都使用UTF-8。我存储MySQL不理解的字符集的经验是,它无法正确排序,但只要我用我写的相同字符编码读出数据,数据就保持不变。

UTF-8是字符编码,一种存储数字的方式。哪个字符由哪个数字Unicode表示 - 这是一个重要的区别。 Unicode包含大量语言,UTF-8可以对它们进行全部编码(0到10FFFF,排序),但Java无法处理所有,因为VM内部表示是一个16位字符(不是你关心Java:)。

答案 2 :(得分:0)

您可以通过将表字段的排序更改为'utf8_general_ci'来在MySQL表中插入任何语言文本。它不区分大小写。