我的应用程序有一个表,其中有两列需要 utf8,其他列是拉丁文。根据定义,拉丁字符不包含非拉丁字符,而 utf8 字符可能包含也可能不包含 utf8 字符。一个 utf8 列被索引,而另一个没有。
我有三个问题:
在列级别混合字符集是一种好的做法吗?
如果一行(在此表上)仅包含拉丁字符而不包含 utf8 字符,数据存储和索引大小会受到怎样的影响?换句话说,是一个 utf8 列数据/索引大小与 latin 相同但不存储任何 utf8 文本。
相对于 latin,数据和索引存储对 utf8 列有何影响?
谢谢
最佳答案
UTF-8 是一种可变长度编码。 ASCII set里面的字符将像 latin1 一样用一个字节编码;超出该范围的字符将使用最多四个字节进行编码。由 ASCII 字符组成的字符串在 UTF8 和 latin1 中具有相同的长度。
Is mixing charsets on a column level a good practice?
我从来没有这样做过,并且倾向于拒绝,因为它不必要地使数据库模式复杂化。虽然数据库引擎应该能够很好地处理它,但出于存储方面的考虑,我不会使用混合字符集。最多只能节省很少的钱。
我能想到的混合字符集的唯一正当理由是对特定排序顺序和/或区分大小写/重音/不区分大小写的搜索使用不同的排序规则。
关于mysql - MySQL 5 中列级别的 CHARSET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512382/