mysql - 数据库、表和列的不同字符集和排序规则会导致性能问题吗?

标签 mysql asp.net utf-8 character-encoding collation

我正在使用 ASP.net 开发一个网站,我的数据库是 MYSQL。

在那里我不希望用户限制只发布英文内容到我的网站。因此,为了支持多语言,我决定将字符集用作 Utf8MB4,将排序规则用作 utf8_general_ci。

那么现在我有几个问题。

1) 我应该将数据库的字符集设置为 Utf8MB4 并将排序规则设置为 utf8_general_ci 吗?

2) 使用数据库的字符集作为 Latin1,排序规则作为 swedsh_ci,在表级别中,我应该为字符集创建表作为 Utf8MB4,并为 utf8_general_ci 创建排序规则吗?

3) 使用数据库的字符集作为 Latin1,将排序规则作为 swedesh_ci,在表中也使用 Latin1 和 swedesh_ci,在列中,我是否应该将字符集设置为 Utf8MB4,将排序规则设置为 utf8_general_ci?

所以我在这里很困惑。 不同的字符集和排序规则是否会导致性能问题? 什么是最好的方法?

最佳答案

utf8mb4utf8_general_ci 是多语言应用程序的不错选择。最好在您的 DDL(您的表定义)中为每个表拼出这些内容并避免依赖默认值。

确保您的 session 的字符集值与您的表匹配也是一个好主意。您可以通过设置服务器范围(而非数据库)默认值,或在您从程序连接后立即发出此 SQL 命令来执行此操作

  SET CHARACTER SET utf8mb4

一般来说,最好将 mysql 服务器配置为保存服务器范围的默认值 utf8utf8mb4utf8_general_ci。这就是这里的解释。 http://dev.mysql.com/doc/refman/5.6/en/charset-applications.html

列上的索引与列的排序规则相匹配。您可以通过在查询上指定特定的排序规则来阻止索引使用。例如,如果您的默认排序规则是 utf8_general_ci,但您需要西类牙语排序规则(区分 N 和 Ñ),您可以在查询中执行此操作。

ORDER BY surname COLLATE utf8_spanish_ci

这将产生正确的结果,但它将无法在您的列上使用索引,因为该列的默认排序规则已嵌入到索引中。

关于mysql - 数据库、表和列的不同字符集和排序规则会导致性能问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587333/

相关文章:

mysql - 如何将整个数据库复制到另一个服务器数据库?

mysql - sugarcrm 简单查询不起作用

c# - Asp.net 从 aspx 中的文本框获取值以隐藏代码

unicode - DB2 UTF-8 数据存储 - 无关字节值

vb.net - 将UTF-8网页下载到String中

php - 如何使用php从不同表中提取数据并将其显示在同一页面上的不同html表中?

mysql - 当开始和结束位于不同的行和列时,合并不同 ID 的日期

c# - 在 xml 中创建 cdata

c# - File.copy() 方法不支持给定路径的格式错误

unicode - 如何迭代 Rust 中的 Unicode 字素簇?