我正在使用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的排序规则?
所以我在这里很困惑。不同的字符集和排序规则会导致性能问题吗?什么是最好的方法?
发布于 2015-02-18 16:36:49
对于多语言应用程序来说,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和N),那么您可以在查询中这样做。
ORDER BY surname COLLATE utf8_spanish_ci这将产生正确的结果,但它不能在列上使用索引,因为该列的默认排序规则已写入索引中。
https://stackoverflow.com/questions/28587333
复制相似问题