在Mysql 5中的列级别上的CHARSET

时间:2010-12-22 18:28:06

标签: mysql character-encoding mysql5

我的应用有一个表,有两列需要utf8,其他列是拉丁语。根据定义,拉丁文字符不包含非拉丁字符,utf8字符可能包含也可能不包含utf8字符。一个utf8列被索引,而另一个则没有。

我有三个问题:

在列级别混合字符集是一种很好的做法吗?

如果一行(在此表上)仅包含拉丁字符且没有utf8字符,那么数据存储和索引大小如何受到影响?换句话说,utf8列数据/索引大小与拉丁语相同,不存储任何utf8文本。

关于拉丁语,utf8列的数据和索引存储如何受到影响?

由于

1 个答案:

答案 0 :(得分:0)

UTF-8是一种可变长度编码。 ASCII set中的字符将使用latin1中的一个字节进行编码;除此之外的字符将使用最多四个字节进行编码。由ASCII字符组成的字符串在UTF8和latin1中具有相同的长度。

  

在列级别混合字符集是一种很好的做法吗?

我从未这样做,并且倾向于拒绝,因为它不必要地使数据库模式复杂化。虽然数据库引擎应该能够很好地处理它,但我会使用混合字符集而不考虑存储问题。节省的费用最少。

我能想到的混合字符集的唯一正当理由是对特定排序顺序和/或大小写/重音敏感/不敏感搜索使用不同的排序规则。