3

我正在使用 ASP.net 开发一个网站,我的数据库是 MYSQL。在那里用户可以提交文章。这个网站走向国际,所以我不想将语言限制为英语。

所以我决定了几件事。如果我做出了错误的选择,请指导我。

1) 我选择 utf8mb4 作为数据库字符集。因为它是 UTF8 的改进版本,用于存储更多字符。我做出了正确的选择吗?我的意思是我只有几个需要使用 utf8mb4 的表。那么我应该使用 Latin1 作为数据库字符集吗?

2)我不知道上述字符集使用哪种排序规则。我决定使用 utf8mb4 swedish_ci。或者我应该使用通用 Ci 还是其他?

3) 在我的表格中,大多数表格不需要 utf8mb4 字符集。拉丁语 1 瑞典语将完成这项工作。那么即使数据库在另一个字符集和排序规则中,我也可以在特定字符集和排序规则下维护选定的表吗?

4) 我可以将 utf8mb4 字符集用于表中以 Latin1 swedesh 作为字符集的特定列吗?

如果那些可以做数据库字符集,表字符集和列字符集之间的关系是什么?

不同的字符集会导致任何性能问题吗?

非常感谢。

4

1 回答 1

4

数据库字符集由表继承,除非您覆盖它。(我建议在表格级别具体化。)

表字符集由表中的列继承。由于通常只有一个字符集,因此这种继承很好。此外,当您执行每列的设置时,也很清楚SHOW CREATE TABLE——无需查看数据库或系统。

走向国际——使用 utf8 或 utf8mb4。我同意 utf8mb4 是更好的选择,尤其是对于中文和一些表情符号。

character_set_%-- 只有 _client、_connection 和 _results 是重要的。而这三个是由 设置的SET NAMES utf8mb4。剩下的就别管了。

utf8mb4 的默认排序规则是 utf8mb4_general_ci,如果您有多种语言,这可能是一个不错的选择。另一种选择是 utf8mb4_unicode_ci 。我在http://mysql.rjweb.org/doc.php/charcoll#combining_diacriticals中更多地谈论“组合变音符号” 。本节给出了这两个排序规则不同之处的示例:http: //mysql.rjweb.org/doc.php/charcoll#utf8_collat​​ions_examples

另请参阅“最佳实践”部分。

对于西欧文本,latin1 小于 utf8。MySQL 会在需要时进行适当的转换,所以这不是问题。但我不想通过混合字符集来混淆程序员。请记住,将现有表列从 latin1 转换为 utf8 需要一些努力,可能会停机,并且可能存在风险。

4) 我可以将 utf8mb4 字符集用于表中以 Latin1 swedesh 作为字符集的特定列吗?

是的。每列(但不是每一行)可以有不同的字符集和/或排序规则。

不同字符集的存在本身并不是一种表现。当两列具有不同的字符集和/或排序规则时,可能会咬你的是(和其他情况)。WHERE col1 = col2如果 MySQL 发现不容易处理的差异,它将放弃原本非常好的索引。

于 2015-02-23T23:38:01.640 回答