MySQL字符集更换与设置
情况一:MySQL数据库初始化操作
确定MySQL字符集:
show variables like 'character_set%';
临时修改
SET character_set_client=utf8
SET character_set_connection=utf8
SET character_set_results=utf8
SET character_set_server=utf8
永久修改 /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
[mysql]
default-character-set=utf8
保存并重启MySQL服务
情况二:将字符集为latin1已有记录的数据转成utf8,并且已经存在的记录不乱码 。(适用生产环境中使用)
1):导出表结构
mysqldump –uroot --default-character-set=latin1 -d book2> booktable.sql
2):编辑booktable.sql 将latin1修改成utf8
vim booktable.sql
:%s/latin1/utf8/g
3):确保数据库不再更新,导出所有数据,不导表结构
mysqldump -uroot –p123456 --quick --no-create-info --extended-insert --default-character-set=latin1 book2>bookdata.sql
参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中
--no-create-info:不要创建create table语句
--extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快
--default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码
4):打开bookdata.sql 将SET NAME latin1 修改成SET NAME utf8
vim bookdata.sql
/*!40101 SET NAMES utf8 */;
5):重新建库
mysql> create database book2 default charset utf8;
6):建立表,导入我们之前导出的表的数据库
mysql –uroot –p123456 book <booktable.sql
7):导入数据
mysql -uroot -p123456 book2 <bookdata.sql