我们创建表结构时可能没有指定表的字符集,导致数据乱码。如果之前的数据库中存在数据,那么不能直接用命令修改字符集,如果直接修改,只会对新创建的表或记录有效,原有数据还是之前的字符集。以 latin1 字符集的数据库为例,修改成 utf8 字符集的数据库
步骤:
1、导出表结构
mysqldump -uroot -p --default-character-set=utf8 -d databasename> e:/createtab.sql
# --default-character-set=utf8:表结构以 utf8 格式导出
# -d:表示只导出表结构,不导出数据
2、手动修改导出的表结构定义中的字符集
3、确保记录不再更新,导出所有记录
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename> e:/data.sql
# --quick:该选项用于转储大的表,强制mysqldump从服务器一次一行检索表中的行而不是所有行,并在输出前将它缓存到内存中
# --no-create-info:不导出每个转储表的create table语句
# --extended-insert:使用包括几个values列表的多行insert语法,这样的转储文件更小,重载文件时可以加速插入
# --default-character-set=latin1:按原有的字符集导出所有数据,这样导出的数据不会乱码
4、打开转储的记录,将 set names latin1 改为 set names utf8
5、使用新的字符集创建新的数据库
create database db_name default charset utf8
6、创建表,执行导出的表结构文件
mysql -uroot -p databasename < e:/createtab.sql
7、导入数据,执行转储的记录文件
mysql -uroot -p databasename < e:/data.sql