【问题标题】:What will happen if I changed the collation of my database?如果我更改了数据库的排序规则,会发生什么?
【发布时间】:2013-10-24 21:20:14
【问题描述】:

我正在尝试提高 MySQL 的性能。我在使用 Latin1 字符集时学到的一件事比使用 UTF8 更快,因为 latin1 使用的字节更少。但我想知道如果我更改排序规则,数据会发生什么?在我今天的应用程序中,大部分内容都是美式英语,但我不能保证也不会有任何其他语言商店。它有人存储英语以外的数据我不太关心这些数据。

我的问题: 1)如果我将数据库中的排序规则更改为 latin1 如果不是用美式英语编写的数据会怎样? 2) 哪个 lation1_?我应该使用 latin1_bin、latin1_general_ci 还是 latin1_general_cs?如果可能的话有什么区别? 3) 更改数据库的排序规则时,是否还需要单独更改每个表的排序规则?

谢谢

【问题讨论】:

  • 是“????”不是人们可能会在您的应用程序中使用的东西吗?不要切换到旧的 Latin1 编码。我会挑战你制作一个基准,表明它明显更快或更节省空间。 MySQL 为每个 UTF-8 字符保留三个字节,但不一定使用它。

标签: mysql character-encoding collation


【解决方案1】:

UTF 8 仅在包含奇怪字符时才使用额外字节。所以真的,你不应该改变你的排序规则。它没有帮助。 UTF 16 被开发用于保存所有语言的所有字符,是的,它使用 16 位,所以如果你使用 utf16,如果你主要使用标准拉丁字符,我建议使用 utf8。 UTF 8 是妥协。它有一个特殊字符,意思是“更多字节来了”,如果它看到它,它会将下一个字节组合在一起。但是,如果您只有拉丁字符,则字节数将与拉丁排序规则完全相同。

要具体回答,您可以为新表设置默认排序规则,但是是的,您必须为每个现有表设置默认排序规则。您可以使用列出表的 sql 语句来执行此操作,然后在每个表上运行 sql 语句来更改它。 (更改1并注意sql语句)。但同样,不要这样做。 utf8 是标准是有原因的。您的性能问题在其他地方。

【讨论】:

  • 感谢您提供的信息。但是,我参加了 MySQL Connect,他们确实建议使用 latin1 以获得更快的性能,我现在很困惑。他们说如果你能把 utf8 改成 latin1 就去吧。
  • 再一次,如果你真的只有拉丁字符,只需更改排序规则并“继续”。理论上,基于文本的查询可能会快几微秒,因为 mysql 不必检查“即将出现的更多字符”,但大多数内部文本引擎在处理时实际上会将文本转换为 utf16。 MySQL Connect 上的一些“老手”一定认为拉丁语比新奇的 utf8 字段“更简单”,但当前的“简单”是通用 utf8 字段。这是您的决定,但我向您保证,您不会看到性能提升“这些不是您要查找的字节”
  • 我明白了。让我问另一件事。如果我将所有内容都保留在 utf8 中,除了外部 ID?外部 id 设置为 CHAR(18) 并且它们是字母和数值,如果我将它们更改为 lation1_generic_ci 会使查找速度更快吗?我也索引了那些 id 列。
  • 比较 2 个字符串在 utf8 中的速度与拉丁文一样快。你需要做一些测试并设定一个目标,然后找出是什么阻碍了你的速度。如果您可能一次与数据库建立多个连接,请确保使用 innodb 表,而不是 myisaam
  • 我使用的是 Innodb 而不是 MyIsaam,我使用的是 MySQL 5.6。我会做一些速度测试。谢谢:)
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2020-08-15
  • 2010-11-20
  • 2016-08-19
  • 2013-08-05
相关资源
最近更新 更多