mysql - MySQL 5 中列级别的 CHARSET

标签 mysql character-encoding mysql5

我的应用程序有一个表,其中有两列需要 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/

相关文章:

mysql - 同一查询重复执行时返回不同的值

php - 如何在 php 中显示 mySQL 表中的 Unicode 文本?

php - 避免重复产品被抓取的建议

mysql - 错误 1054 (45S22) : Uknown column 'jeff' in 'field list'

mysql - 使用mysql增量更新返回重复键错误

mysql - 如何使用mysql replace将所有双引号替换为单引号?

php - 通过一次查询更新大型数据库

python DBF : 'ascii' codec can't decode byte 0xf6 in position 6: ordinal not in range(128)

python - 从 VBA 到 Flask 的 HTTP 请求的编码问题

java - itextpdf HTML 到包含西里尔字母的 PDF