我对MySQL文档中的两个例子感到困惑
“指定字符集”:ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;
和“转换字符集”:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;
忽略算法和锁值,两者有什么区别?它们似乎都改变了现有表的字符集?
发布于 2022-06-22 14:58:37
第一个示例只更改表的默认字符集。
这是元数据唯一的更改,因为它实际上并不改变任何数据,它只更改表的默认值。默认只在以后向表中添加字符串列时应用,而不指定字符集。更改表的默认字符集不会转换表中的任何当前字符串列。它们将保存在以前的字符集中。
可以一个一个地将列转换为新字符集:
ALTER TABLE tbl_name MODIFY COLUMN column1 VARCHAR(50) CHARACTER SET utf8mb4;或者,您可以在一个更改中转换所有字符串列:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4;这些转换步骤中的任何一个都需要执行表副本来重写数据。如果您有几个字符串列,并且希望将它们全部转换,那么最好使用“转换到字符集”,这样您只需要做一次表复制。
https://stackoverflow.com/questions/72715542
复制相似问题