【问题标题】:MySQL change database + tables charset & collation from UTF8 to UTF8mb4MySQL 将数据库 + 表字符集和排序规则从 UTF8 更改为 UTF8mb4
【发布时间】:2017-11-27 14:54:15
【问题描述】:

我目前有一个具有以下设置的 MySQL 数据库:

character_set_client: utf8
character_set_connection: utf8
character_set_database: utf8
character_set_filesystem: binary
character_set_results: utf8
character_set_server: latin1
character_set_system: utf8
collation_connection: utf8_general_ci 
collation_database: utf8_general_ci  
collation_server: latin1_swedish_ci  

我想在数据库中支持表情符号和其他语言(如中文)。目前这不起作用,这些字符会自动转换为?

我用charset & collation utf8mb4(_general_ci) 创建了一个测试数据库以及一个具有相同设置的表。表情符号在这里工作。但是,当我将数据库设置更改为 utf8(_general_ci) 并将表格保留为 utf8mb4(_general_ci) 时,表情符号仍在工作,而我的主数据库不是这种情况。

如果我将我的主数据库设置更改为charset + collation utf8mb4(_general_ci),以及表格,那会起作用吗?

对于数据库访问,是否需要更改其他任何内容,例如character_set_connectioncollation_connection? 我知道在我的 JavaScript 服务器上,连接配置为 utf8,我假设它必须是 utf8mb4

所有当前的utf8(_general_ci) 数据,在更改为utf8mb4(_general_ci) 时会保持不变吗?

【问题讨论】:

    标签: mysql database utf-8 character-encoding


    【解决方案1】:

    正确存储的 utf8 字符将正确转换为 utf8mb4。

    您还应该指定连接是 utf8mb4。

    有关“问号”的讨论,请参阅 this

    要将所有字符/文本列转换为 utf8mb4:

    ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;
    

    转换一列:

    ALTER TABLE tbl MODIFY COLUMN col ... CHARACTER SET utf8mb4;
    

    【讨论】:

    • 感谢您的回答。这就是我需要的。然后还有一件事。该数据库在 2 个独立的服务器上运行,并使用 master-master replication 进行同步。我已经看到两者的列设置都发生了变化,但表设置却没有。在两个数据库上都可以这样做,还是会破坏任何东西?谢谢!
    • @JeroenJK - 服务器不完全相同似乎很奇怪。您究竟执行了哪些命令?如果您稍后添加一列而不指定字符集/排序规则,可能会出现问题 -- 如果它在每台机器上选择 不同 DEFAULT
    猜你喜欢
    • 2018-06-08
    • 2023-03-17
    • 2012-07-27
    • 1970-01-01
    • 2018-09-30
    • 2012-01-02
    • 1970-01-01
    • 2020-10-29
    • 2018-06-10
    相关资源
    最近更新 更多