【问题标题】:`CHARACTER SET=` vs `CONVERT TO CHARACTER SET``CHARACTER SET=` vs `CONVERT TO CHARACTER SET`
【发布时间】:2022-06-22 22:58:37
【问题描述】:

我对@9​​87654321@ 中的两个示例感到困惑:

“指定字符集”: ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;

和“转换字符集”:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;

忽略算法和锁值,两者有什么不同?似乎它们都更改了现有表的字符集?

【问题讨论】:

    标签: mysql character-encoding


    【解决方案1】:

    第一个示例仅更改表的默认字符集。
    这是仅元数据的更改,因为它实际上并没有更改任何数据,它只更改了表的默认值。 仅当您稍后将字符串列添加到表中时才适用默认设置,而无需指定字符集。 更改表的默认字符集不会转换表中的任何当前字符串列。 它们将继续存储在以前的字符集中。

    您可以将列一一转换为新的字符集:

    ALTER TABLE tbl_name MODIFY COLUMN column1 VARCHAR(50) CHARACTER SET utf8mb4;
    

    或者您可以一次转换所有字符串列:

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4;
    

    这些转换步骤中的任何一个都需要执行表复制来重写数据。如果您有多个字符串列并且想要将它们全部转换,您不妨使用 CONVERT TO CHARACTER SET,这样您只需执行一次表格复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 2020-03-31
      • 2013-05-17
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多