当前位置: 首页 > 知识库问答 >
问题:

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

杨彦君
2023-03-14

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

在那里,我不希望用户限制只发布英文内容到我的网站。所以为了支持多语言,我决定使用Charset作为Utf8MB4,使用归类作为utf8_general_ci。

所以现在我有几个问题。

1) 我是否应该将数据库的字符集设置为Utf8MB4,并对utf8\u general\u ci进行排序?

2) 使用数据库的字符集Latin1和排序规则swedsh_ci,在表级别中,我是否应将字符集的表设置为Utf8MB4,并将utf8_general_ci的排序规则设置为Utf8MB4?

3)使用数据库的charset作为Latin1和归类作为swedesh_ci和In表也使用Latin1和swedesh_ci在列中,我应该设置charset为Utf8MB4和归类utf8_general_ci?

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

共有1个答案

萧胜
2023-03-14

utf8mb4utf8\u general\u 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

这将产生正确的结果,但它无法在列上使用索引,因为列的默认归类已嵌入索引。

 类似资料:
  • 我正在用ASP开发一个网站。net和我的数据库是MYSQL。在那里,用户可以提交文章。这个网站是国际性的,所以我不想把语言限制为英语。 所以我决定做几件事。如果我做了错误的选择,请指导我。 1) 我选择utf8mb4作为数据库字符集。因为它是UTF8的改进版本,用于存储更多字符。我的选择正确吗?我的意思是,我只有几个需要使用utf8mb4的表。那么我应该使用Latin1作为数据库字符集吗? 2)

  • 我一直在MariaDB中使用大型和扩展数据库的数据库。数据库由PHP应用程序访问。 我将DB字符集和排序规则设置为utf8mb4和utf8mb4\u unicode\u ci 但并非所有的表都有text(varchar、text等)列。有些表只保存关系,因此所有列都是数字类型(int、bigint等)或日期/时间等。此外,不是文本类型。 在表中,我只保留数字,我是否需要保留Unicode多字节字符

  • 问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个

  • 我的firebase数据库有以下规则: 因此,我不能登录到我的应用程序,即使我使用有效的电子邮件id和密码。当我把我的规则改成下面的规则时,事情就完全正常了。

  • 问题内容: 现在数据库已建立,我想将排序规则更改为。 PhpMyAdmin中是否有任何设置可以更改数据库,表,列的排序规则?而不是一一改变? 问题答案: 您需要单独转换每个表: (这也将转换列),或使用导出数据库,然后使用将其导入回来。

  • 问题内容: 如何将整个MySQL数据库字符集转换为UTF-8并将排序规则转换为UTF-8? 问题答案: 使用和命令。 或者,如果您仍在不支持4字节UTF-8的MySQL 5.5.2或更早版本上,请使用代替: