我正在使用ASP.net开发一个网站,我的数据库是MYSQL。
在那里,我不希望用户仅限制将英文内容发布到我的网站。因此,为了支持多语言,我决定使用Charset作为Utf8MB4并将其整理为utf8_general_ci。
所以现在我有几个问题。
1)我应该将数据库的字符集设置为Utf8MB4并将字符串设置为utf8_general_ci吗?
2)使用数据库的charset作为Latin1和collation作为swedsh_ci和In表级别我应该为charset制作表作为Utf8MB4和整理utf8_general_ci吗?
3)使用数据库的charset作为Latin1和collation作为swedesh_ci和In表也使用Latin1和swedesh_ci并且在列中我应该将字符集设置为Utf8MB4并将字符串设置为utf8_general_ci?
所以我在这里感到困惑。 不同的字符集和排序会导致性能问题吗? 什么是最好的方法?
答案 0 :(得分:2)
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
这将产生正确的结果,但将无法使用列上的索引,因为列的默认排序规则会被烘焙到索引中。