当前位置:嗨网首页>书籍在线阅读

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');

这次,中文字符可以正确地导出。