mysql - 数据库字符集、表字符集和列字符集之间的关系?不同的字符集是否会导致任何性能问题?

标签 mysql asp.net character-encoding collation utf8mb4

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

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

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

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

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

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

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

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

非常感谢。

最佳答案

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

表的字符集由表中的列继承。由于一个人通常只有一个字符集,因此这种继承很好。此外,当您执行 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_collations_examples

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

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

4) Can I use utf8mb4 charset for a specific column in a table which have Latin1 swedesh as charset?

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

不同字符集的存在本身并不是性能。当两列具有不同的字符集和/或排序规则时,可能 会影响您的是 WHERE col1 = col2(以及其他情况)。如果 MySQL 发现不容易处理的差异,它将放弃原本完美的索引。

关于mysql - 数据库字符集、表字符集和列字符集之间的关系?不同的字符集是否会导致任何性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512678/

相关文章:

python - 将带有未定义字符的字节文字写入 CSV 文件(Python 3)

python - Python 中的 Unicode 问题

css - 为什么我的 CSS 字体系列中的换行符会破坏 IE?我怎样才能避免这种情况?

php - 安全的 PHP 查询?

c# - 使用 C# 和 Entity Framework 在 mysql 中创建运行时表

python - csv到多表插入更新

asp.net - 为什么 ASP.NET Web API 只允许 POST 方法使用一个参数?

MySQL 计算 INNER 关系中的项目数

jquery - jquery 不从 javascript 函数调用 Web 方法

c# - 如果 SQL Server 2012 插入太大,我该如何截断插入?