数据库,表格和列的不同字符集和排序规则是否会导致性能问题?

时间:2015-02-18 15:30:59

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

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

在那里,我不希望用户仅限制将英文内容发布到我的网站。因此,为了支持多语言,我决定使用Charset作为Utf8MB4并将其整理为utf8_general_ci。

所以现在我有几个问题。

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

2)使用数据库的charset作为Latin1和collat​​ion作为swedsh_ci和In表级别我应该为charset制作表作为Utf8MB4和整理utf8_general_ci吗?

3)使用数据库的charset作为Latin1和collat​​ion作为swedesh_ci和In表也使用Latin1和swedesh_ci并且在列中我应该将字符集设置为Utf8MB4并将字符串设置为utf8_general_ci?

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

1 个答案:

答案 0 :(得分:2)

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

确保会话的字符集值与表格匹配也是一个好主意。您可以通过设置服务器范围(非数据库)默认值,或通过从程序连接后立即发出此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

这将产生正确的结果,但将无法使用列上的索引,因为列的默认排序规则会被烘焙到索引中。