如何将latin1_swedish_ci数据转换为utf8_general_ci?

asl*_*tor 15 php mysql character-encoding

我有一个MySQL数据库,其中包含所有表字段排序规则

latin1_swedish_ci
Run Code Online (Sandbox Code Playgroud)

它已经存储了近1000条记录,现在我想将所有这些数据转换成

utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

这样我就可以显示任何语言内容.我已经改变了该领域的归类为utf8_general_ci但这并不CONVERT所有的旧记录到utf8_general_ci

小智 8

一个有趣的事情.

如果表中的charset处于正确编码状态,则Anshu建议的CONVERT TO CHARSET和CONVERT()/ CAST()将正常工作.

如果由于某种原因,latin1列包含utf8文本,CONVERT()和CAST()将无法提供帮助.我用这个设置"乱搞"了我的数据库,所以花更多的时间来解决这个问题.

除了字符集转换之外,还需要进行几项练习.

  1. "硬件"是从转储中重新创建数据库,将通过控制台转换
  2. "简单的一个"是逐行或按表转换:
INSERT INTO UTF8_TABLE (UTF8_FIELD)
SELECT convert(cast(convert(LATIN1_FIELD using latin1) as binary) using utf8)
  FROM LATIN1_TABLE;
Run Code Online (Sandbox Code Playgroud)

基本上,两种情况都会处理字符串到原始符号,然后处理到正确的编码,这不会发生在simple convert(field using encoding) from table;命令中.

  • 您还可以进行更新:`update TABLE_NAME set COLUMN_NAME = convert(cast(convert(COLUMN_NAME using latin1) as binary) using utf8);` 只需记住执行一次! (3认同)