我有一个MySQL数据库(myDB;~2GB大小),有4个表(tab1tab2tab3tab4)。目前,存储在表中的数据是使用字符集添加的(即ISO-8859-1)。
我想将所有表中的数据转换为Latin-1并使用UTF-8作为表/数据库/列的默认字符集。
我发现了一个有趣的方法:

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

我还没试过,但有什么需要注意的吗?
有没有办法直接在mysql shell中实现呢?
[编辑:]
运行后UTF-8的结果
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

最佳答案

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

ALTER TABLE tab1 CONVERT TO utf8mb4;
etc.

要检查,请执行SHOW CREATE TABLE tab1;它应该显示您CHARACTER SET utf8mb4
注意:有三件事:
转换任何VARCHARTEXT列中的数据编码。
更改此类列的CHARACTER SET
更改表的DEFAULT CHARACTER SET——如果在不指定字符集的情况下添加任何新列,这将起作用。
应用程序…
当您从客户端连接到mysql时,您需要以特定于应用程序的方式或通过SET NAMES告诉它客户端中字节的编码。这不必与列声明相同;如有必要,转换将在INSERTSELECT期间进行。
我建议您备份和/或测试其中一个表的副本。一定要一直进行——插入、选择、显示等。

10-02 00:37
查看更多