我有一个MySQL数据库(myDB
;~2GB大小),有4个表(tab1
,tab2
,tab3
,tab4
)。目前,存储在表中的数据是使用字符集添加的(即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
。注意:有三件事:
转换任何
VARCHAR
和TEXT
列中的数据编码。更改此类列的
CHARACTER SET
。更改表的
DEFAULT CHARACTER SET
——如果在不指定字符集的情况下添加任何新列,这将起作用。应用程序…
当您从客户端连接到mysql时,您需要以特定于应用程序的方式或通过
SET NAMES
告诉它客户端中字节的编码。这不必与列声明相同;如有必要,转换将在INSERT
和SELECT
期间进行。我建议您备份和/或测试其中一个表的副本。一定要一直进行——插入、选择、显示等。