我有一个MySQL数据库(myDB
;大小约2GB),有4个表(tab1
,tab2
,tab3
,tab4
)。目前,使用字符集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
答案 0 :(得分:2)
可以转换表格。但是你也需要转换应用程序。
ALTER TABLE tab1 CONVERT TO utf8mb4;
etc.
要检查,请执行SHOW CREATE TABLE tab1
;它应该显示CHARACTER SET utf8mb4
。
注意:有三件事情在继续:
VARCHAR
和TEXT
列中的数据编码。CHARACTER SET
。DEFAULT CHARACTER SET
- 如果您在未指定字符集的情况下添加任何新列,则会发挥作用。申请......
当您从客户端连接到MySQL时,您需要以特定于应用程序的方式或通过SET NAMES
告诉它客户端中字节的编码。这 not 必须与列声明相同;如有必要,转换将在INSERT
和SELECT
期间进行。
我建议您备份和/或测试其中一个表的副本。一定要一直走 - 插入,选择,显示等。