如何将MySQL数据库从Latin-1迁移到UTF-8?

时间:2017-02-24 23:04:18

标签: mysql database encoding utf-8 iso-8859-1

我有一个MySQL数据库(myDB;大小约2GB),有4个表(tab1tab2tab3tab4)。目前,使用字符集ISO-8859-1(即Latin-1)添加了存储在表格中的数据。

我想将所有表中的数据转换为UTF-8,并使用UTF-8作为表/数据库/列的默认字符集。

https://blogs.harvard.edu/djcp/2010/01/convert-mysql-database-from-latin1-to-utf8-the-right-way/我找到了一个有趣的方法:

mysqldump myDB | sed -i 's/CHARSET=latin1/CHARSET=utf8/g' | iconv -f latin1 -t utf8 | mysql myDB2

我还没有尝试过,但是有什么警告吗?

有没有办法在MySQL shell中直接执行?

[编辑:

运行SHOW CREATE TABLE messages;

ALTER TABLE messages CONVERT TO CHARACTER SET utf8mb4;的结果
CREATE TABLE `messages` (
  `number` int(11) NOT NULL AUTO_INCREMENT,
  `status` enum('0','1','2') NOT NULL DEFAULT '1',
  `user` varchar(30) NOT NULL DEFAULT '',
  `comment` varchar(250) NOT NULL DEFAULT '',
  `text` mediumtext NOT NULL,
  `date` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`number`),
  KEY `index_user_status_date` (`user`,`status`,`date`)
) ENGINE=InnoDB AUTO_INCREMENT=3285217 DEFAULT CHARSET=utf8mb4

1 个答案:

答案 0 :(得分:2)

可以转换表格。但是你也需要转换应用程序。

ALTER TABLE tab1 CONVERT TO utf8mb4;
etc.

要检查,请执行SHOW CREATE TABLE tab1;它应该显示CHARACTER SET utf8mb4

注意:有三件事情在继续:

  • 转换任意VARCHARTEXT列中的数据编码。
  • 更改此类列的CHARACTER SET
  • 更改表格的DEFAULT CHARACTER SET - 如果您在未指定字符集的情况下添加任何新列,则会发挥作用。

申请......

当您从客户端连接到MySQL时,您需要以特定于应用程序的方式或通过SET NAMES告诉它客户端中字节的编码。这 not 必须与列声明相同;如有必要,转换将在INSERTSELECT期间进行。

我建议您备份和/或测试其中一个表的副本。一定要一直走 - 插入,选择,显示等。