对于SQL,如果我只是使用表来存储拉丁语(或特定的,只是英语)区分大小写的字符串,那么utf8_bin和latin1_general_cs之间会有区别吗?
答案 0 :(得分:0)
如果您要存储的字符可由Latin-1表示,那么您可以存储的字符不会有所不同。你在这里特别谈论的是 collations 。使用latin1_general_cs
排序规则时,这意味着该列的字符集为latin1
。与排序utf8_bin
相同的方式意味着utf8
的字符集。
首先,您应该决定要使用的字符集,然后对于每个字符集,您可以选择多个排序规则。整理会影响记录的排序和比较方式。 _bin
排序规则比较文本的原始二进制表示,即只有100%相等的值将相等。其他归类如_general_cs
应用语言感知排序和比较规则(例如german
归类将排序并比较“ß”接近“s”),而_cs
代表区分大小写。 _ci
归类将不区分大小写,这意味着“foo”和“Foo”比较相等。
因此,请根据您打算如何使用该列来选择。
答案 1 :(得分:0)
英语字符的编码在latin1
和utf8
(以及MySQL支持的大多数其他CHARACTER SETs
)中相同。所以英文文本在字符集之间的作用相同。
两个COLLATIONs
的工作方式相同。例如,A
!= a
。
回到问题......
CHARACTER SET
)是不同的。并且重音字母的顺序是不同的。latin1
中,但您可以将其中大部分存储在utf8
中。latin1_bin
也为您提供区分大小写。 对于英语,它与latin1_general_cs
无法区分。 MySQL世界正朝着utf8mb4
迈进。