我正在使用 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?
所以我在这里很困惑。 不同的字符集和排序规则是否会导致性能问题? 什么是最好的方法?
最佳答案
utf8mb4
和 utf8_general_ci
是多语言应用程序的不错选择。最好在您的 DDL(您的表定义)中为每个表拼出这些内容并避免依赖默认值。
确保您的 session 的字符集值与您的表匹配也是一个好主意。您可以通过设置服务器范围(而非数据库)默认值,或在您从程序连接后立即发出此 SQL 命令来执行此操作
SET CHARACTER SET utf8mb4
一般来说,最好将 mysql 服务器配置为保存服务器范围的默认值 utf8
或 utf8mb4
和 utf8_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/