如果应用开始阶段没有设置正确的字符集,运行一段时间才发现存在不能满足要求,需要进行调整,又不想丢掉这段时间的数据,那么就需要进行字符集的修改。
字符集的修改不能通过alter database character set ***;或者alter table tablename character set ***;命令进行。这两个命令都不能更新已有记录的字符集,而只是对新创建的表和记录生效。已有记录的字符集调整,需要先将数据导出,然后经过适当调整重新导入后才可完成。
一下模拟的是将latin1字符集的数据库修改成gbk字符集的数据库的过程:
1.导出表结构:
mysqldump -u root -p --default-character-set=gbk -d databasename>createtab.sql
其中,--default-character-set=gbk表示以什么字符集连接,-d表示只导出表结构,不导出数据。
2.手工修改createtab.sql中表结构定义的字符集为新的字符集。
3.确保记录不再更新,导出所有记录:
mysqldump -u root -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename>data.sql
--extended-insert :使用包括几个values列表的多行insert语法,这样使转储文件更小,重载文件时可快速插入。
--no-create-info :不重新创建每个转储表的create table 语句。
--default-character-set=latin1 :按照原有字符集编码导出所有数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。
4.打开data.sql,将set names latin1;修改成set names gbk;
5.使用新的字符集创建新的数据库:
create database dbname character set gbk;
6.创建表,执行createtab.sql
mysql -u root -p databasename<createtab.sql
7.导入数据,执行data.sql
mysql -u root -p databasename<data.sql
阅读(1057) | 评论(0) | 转发(0) |