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

我正在使用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,并且在列中我应该将charset设置为Utf8MB4并将字符串设置为utf8_general_ci?

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

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

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

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

点赞