【问题标题】:What MySQL collation is best for accepting all unicode characters?什么 MySQL 排序规则最适合接受所有 unicode 字符?
【发布时间】:2012-12-29 01:18:29
【问题描述】:

我们的专栏目前被整理到latin1_swedish_ci 并且特殊的 unicode 字符显然被删除了。我们希望能够接受U+272A ✪U+2764 ❤、(参见this wikipedia article)等字符。我倾向于utf8_unicode_ci,这个排序规则会处理这些字符和其他字符吗?我不在乎速度,因为此列不是索引。

MySQL 版本:5.5.28-1

【问题讨论】:

标签: mysql collation


【解决方案1】:

collat​​ion 是您最不用担心的,您需要考虑的是列/表/数据库的字符集。排序规则(管理数据如何比较排序的规则)只是其必然结果。

MySQL 支持多种 Unicode 字符集,utf8utf8mb4 是最有趣的。 utf8 支持 BMP 中的 Unicode 字符,即所有 Unicode 的子集。 utf8mb4,自 MySQL 5.5.3 起可用,支持所有的 Unicode。

与任何 Unicode 编码一起使用的排序规则很可能是xxx_general_cixxx_unicode_ci。前者是一种独立于语言的通用排序和比较算法,后者是一种更完整语言独立的算法,支持更多的 Unicode 特性(例如将“ß”和“ss”视为等价),但因此也比较慢。

https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-sets.html

【讨论】:

  • 我运行了这个查询:ALTER TABLE mydb.mytable CHANGE mycolumn mycolumn VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,但我仍然没有得到正确的值,我是否还必须设置表和数据库字符集?
  • 不,只有列有字符集,如果没有为每列指定,表和数据库字符集只是默认设置。那是什么意思,“你没有得到正确的值”?您如何尝试获得正确的值?您需要从前到后设置正确的连接字符集,包括客户端连接也需要设置为utf8mb4。有关详细说明,请参阅 this article
  • 一个 Java 应用程序正在更新数据库,而不是特殊的 unicode 字符,我只是在它们的位置看到了 ?。我不开发Java应用程序,我猜它一定是在转义字符本身。
  • 这非常模糊。 :) 正如前面链接的文章中所述,编码必须从前到后正确处理以正确保留字符。问题可能出在链 (web?) Java DB 驱动程序 DB 中的任何地方。如果您不负责 Java 应用程序,只需确保数据库以正确的编码保存和返回数据。
  • 我会将此转发给 Java 开发人员,看看是否能解决问题。不过我会给你赏金(在 4 小时内,我可以奖励它),谢谢你的帮助!
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 2013-09-13
  • 2011-07-28
  • 2012-10-26
  • 2011-10-22
  • 2011-10-09
  • 2010-11-29
  • 2017-10-08
相关资源
最近更新 更多