utf8_bin和latin1_general_cs之间有什么区别?

时间:2018-04-12 07:27:24

标签: mysql mariadb

对于SQL,如果我只是使用表来存储拉丁语(或特定的,只是英语)区分大小写的字符串,那么utf8_bin和latin1_general_cs之间会有区别吗?

2 个答案:

答案 0 :(得分:0)

如果您要存储的字符可由Latin-1表示,那么您可以存储的字符不会有所不同。你在这里特别谈论的是 collat​​ions 。使用latin1_general_cs排序规则时,这意味着该列的字符集latin1。与排序utf8_bin相同的方式意味着utf8的字符集。

首先,您应该决定要使用的字符集,然后对于每个字符集,您可以选择多个排序规则。整理会影响记录的排序和比较方式_bin排序规则比较文本的原始二进制表示,即只有100%相等的值将相等。其他归类如_general_cs应用语言感知排序和比较规则(例如german归类将排序并比较“ß”接近“s”),而_cs代表区分大小写_ci归类将不区分大小写,这意味着“foo”和“Foo”比较相等。

因此,请根据您打算如何使用该列来选择。

答案 1 :(得分:0)

英语字符的编码在latin1utf8(以及MySQL支持的大多数其他CHARACTER SETs)中相同。所以英文文本在字符集之间的作用相同。

两个COLLATIONs的工作方式相同。例如,A!= a

回到问题......

  • 对于英语,没有区别。如果这是你将拥有的全部,那么选择其中一个。
  • 对于在欧洲发现的重音字母,编码(CHARACTER SET)是不同的。并且重音字母的顺序是不同的。
  • 对于来自世界其他地方的角色 - 您将无法将其存储在latin1中,但您可以将其中大部分存储在utf8中。
  • latin1_bin也为您提供区分大小写。 对于英语,它与latin1_general_cs无法区分。

MySQL世界正朝着utf8mb4迈进。