我的应用有一个表,有两列需要utf8,其他列是拉丁语。根据定义,拉丁文字符不包含非拉丁字符,utf8字符可能包含也可能不包含utf8字符。一个utf8列被索引,而另一个则没有。
我有三个问题:
在列级别混合字符集是一种很好的做法吗?
如果一行(在此表上)仅包含拉丁字符且没有utf8字符,那么数据存储和索引大小如何受到影响?换句话说,utf8列数据/索引大小与拉丁语相同,不存储任何utf8文本。
关于拉丁语,utf8列的数据和索引存储如何受到影响?
由于
答案 0 :(得分:0)
UTF-8是一种可变长度编码。 ASCII set中的字符将使用latin1中的一个字节进行编码;除此之外的字符将使用最多四个字节进行编码。由ASCII字符组成的字符串在UTF8和latin1中具有相同的长度。
在列级别混合字符集是一种很好的做法吗?
我从未这样做,并且倾向于拒绝,因为它不必要地使数据库模式复杂化。虽然数据库引擎应该能够很好地处理它,但我会不使用混合字符集而不考虑存储问题。节省的费用最少。
我能想到的混合字符集的唯一正当理由是对特定排序顺序和/或大小写/重音敏感/不敏感搜索使用不同的排序规则。