Mysql 5中列级别的CHARSET
Posted
技术标签:
【中文标题】Mysql 5中列级别的CHARSET【英文标题】:CHARSET on column level in Mysql 5 【发布时间】:2011-05-29 13:59:16 【问题描述】:我的应用程序有一个表,其中有两列需要 utf8,其他列是拉丁文。根据定义,拉丁字符不包含非拉丁字符,而 utf8 字符可能包含也可能不包含 utf8 字符。一个 utf8 列已编入索引,另一列未编入索引。
我有三个问题:
在列级别混合字符集是一种好习惯吗?
如果一行(在此表上)仅包含拉丁字符而没有 utf8 字符,那么数据存储和索引大小会受到怎样的影响?换句话说,utf8 列数据/索引大小与拉丁文相同,但不存储任何 utf8 文本。
相对于拉丁语,utf8 列上的数据和索引存储如何量化?
谢谢
【问题讨论】:
【参考方案1】:UTF-8 是一种可变长度编码。 ASCII set 中的字符将被编码为一个字节,如 latin1;超出此范围的字符将使用最多四个字节进行编码。由 ASCII 字符组成的字符串在 UTF8 和 latin1 中具有相同的长度。
在列级别混合字符集是一种好习惯吗?
我从来没有这样做过,并且倾向于说不,因为它不必要地使数据库架构复杂化。虽然数据库引擎应该能够很好地处理它,但出于存储考虑,我不会使用混合字符集。节省的钱最多是最少的。
我能想到的混合字符集的唯一正当理由是对特定排序顺序和/或区分大小写/重音/不区分搜索使用不同的排序规则。
【讨论】:
Pekka,存储和索引都需要 1 字节还是 4 字节?最多 4 个字节,如俄语 2 个字节或中文 4 个字节等等?有这些图表吗? 还有一个问题,德语变音符号是否超过 1 个字节,因为它们不是 US-ASCII?以上是关于Mysql 5中列级别的CHARSET的主要内容,如果未能解决你的问题,请参考以下文章