16-字符集选项
--default-character-set=name选项可以设置导出的客户端字符集。系统默认的客户端字符集可以通过以下命令来查看:
[zzx@localhost~]$ mysqld --verbose --help|grep 'default-character-set'|grep -v name
default-character-set gbk
这个选项在导出数据库的时候非常重要,如果客户端字符集和数据库字符集不一致,数据在导出的时候就需要进行字符集转换,将数据库字符集转换为客户端字符集,经过转换后的数据很可能成为乱码或者“?”等特殊字符,使得备份文件无法恢复。
下面是一个字符集导出中文的例子。
(1)测试表emp字符集为latin1,插入测试记录。
mysql> show create table emp \G;
1. row
Table: emp
Create Table: CREATE TABLE 'emp' (
'id' int(11) NOT NULL default '0',
'name' varchar(200) default NULL,
'content' text,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into emp values(5,'中国','test');
Query OK, 1 row affected (0.05 sec)
(2)用默认客户端字符集导出表emp。
[zzx@localhost~]$ mysqld --verbose --help|grep 'default-character-set' |grep -v name
default-character-set gbk
[zzx@localhost~]$ mysqldump -uroot --compact test emp >a
[zzx@localhost~]$ more a
CREATE TABLE 'emp' (
'id' int(11) NOT NULL default '0',
'name' varchar(200) default NULL,
'content' text,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO 'emp' VALUES (1,'z1','aa'),(2,'z1','aa'), (3,'z1','aa'), (4,'z1', 'aa'),(5,'脰脨鹿煤','test');
可以发现“中国”这两个汉字已经变成了乱码。
(3)手工设置客户端字符集为latin1,重新导出。
[zzx@localhost~]$ mysqldump -uroot --compact --default-character- set= latin1 test emp >a
[zzx@localhost~]$ more a
CREATE TABLE 'emp' (
'id' int(11) NOT NULL default '0',
'name' varchar(200) default NULL,
'content' text,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO 'emp' VALUES (1,'z1','aa'),(2,'z1','aa'), (3,'z1','aa'), (4,'z1', 'aa'),(5,'中国','test');
这次,中文字符可以正确地导出。