【问题标题】:How to change the collation of an existing MySQL database?如何更改现有 MySQL 数据库的排序规则?
【发布时间】:2019-01-24 20:06:56
【问题描述】:

如何更改现有 MySQL 数据库的排序规则?

这是一个 Drupal 8 站点

目前我的数据库使用排序规则 utf8_general_ci

是否可以使用排序规则 utf8mb4_unicode_ci 转换现有数据库?

是否存在损坏数据库的风险?

编辑

最后表格的格式是 utf8_general_ci

为什么写在“操作”选项卡utf8_general_ci?

utf8mb4_general_ci 和 utf8mb4_unicode_ci 有什么区别?

目前推荐使用哪种“排序规则”?

【问题讨论】:

  • utf8mb4_unicode_ci 是您现在想要的所有表的排序规则。
  • @Martin 是的,因为它是推荐的分类

标签: mysql database phpmyadmin


【解决方案1】:

您可以使用ALTER DATABASE 查询:

ALTER DATABASE databasename COLLATE utf8mb4_unicode_ci;

这只是更改数据库的默认排序规则,在创建新表时使用,它不会修改任何现有表。但是,documentation 提到了有关存储例程的警告:

如果您更改数据库的默认字符集或排序规则,则必须删除并重新创建使用数据库默认值的存储例程,以便它们使用新的默认值。 (在存储例程中,如果未明确指定字符集或排序规则,则具有字符数据类型的变量使用数据库默认值。

【讨论】:

  • 现在您似乎在询问表的排序规则,而不是数据库的排序规则。
  • 我们可以将 utf8mb4_general_ci 转换为 utf8mb4_unicode_ci 吗?
【解决方案2】:

更改数据库的排序规则只会影响您在该数据库中创建的新表,但它很容易做到:从数据库的“操作”选项卡中查找“排序规则”下拉列表:

您可以更进一步,同样地从每个表的“操作”选项卡更改表级排序规则。

现在,如果您想更改现有数据,那就有点困难了。您可以使用 phpMyAdmin 来执行此操作,但应先备份您的数据库。在表级结构选项卡中,单击“更改”链接以编辑单个列,或从同一列一次编辑多个。在那里,您可以更改现有数据,phpMyAdmin 将尝试对其进行转换。这应该可行,但是在更改排序规则时(特别是当新排序规则中不存在字符时)总是有可能导致数据丢失或损坏,因此会显示警告:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 2012-07-27
    • 2010-11-20
    • 2012-09-26
    • 2013-05-19
    • 2011-04-08
    • 1970-01-01
    • 2016-08-19
    相关资源
    最近更新 更多