数据库字符集修改

如果mysql数据库在运行一段时间后(不能满足现有需求),需要调整数据库的字符集。在调整数据库字符集要注意:目标数据库的字符集要源数据库的父集,这样在转换中,数据才不会丢失。Alter database character set及alter table character set不会更新已有的记录的字符集。

从gb2312字符集修改成gbk的步骤:

mysql> create database luoxuan default charset gb2312;  
mysql> use luoxuan  
Database changed  
mysql> create table test_charset  
    -> (i smallint not null auto_increment,  
    -> name varchar(10),primary key(i))  
    -> engine=myisam charset=gb2312 ;  
Query OK, 0 rows affected (0.05 sec)  

插入两条记录:  

insert into test_charset values(1,’李杰’)  —-支持gb2312  
insert into test_charset values(2,’郎郎’) —-不支持gb2312,支持gbk  
mysql> select * from test_charset;  
+—+——+  
| i | name |  
+—+——+  
| 1 | 李杰 |  
| 2 | ??   |  
+—+——+  
2 rows in set (0.00 sec) 

1、 导出表结构

[root@blog etc]# mysqldump -uroot -p*** –default-character-set=gbk -d luoxuan>createts.sql  

在使用mysqldump过程遇到点两个问题:  
一、  

[root@blog etc]# mysqldump -uroot -p*** –default-character-set=gbk -d luoxuan>createts.sql  
mysqldump: unrecognized option `–max_allowed_packet=16M’  

说明这个版本的mysqldump不支持max_allowed_packet,修改my.cnf,屏蔽。  

二、

[root@blog etc]# mysqldump -uroot -p*** –default-character-set=gbk -d luoxuan>createts.sql  
mysqldump: Got error: 1251: Client does not support authentication protocol requested by server;  
 consider upgrading MySQL client when trying to connect 

解决办法:  

mysql>set password for xxx@hostname=old_password(‘yyy’); 
mysql>flush privileges; 

或直接更新权限表 

mysql>UPDATE mysql.user SET Password = OLD_PASSWORD(‘newpwd’) 
WHERE Host = ‘host’ AND User = ‘user’;  
mysql>FLUSH PRIVILEGES;  

2、 手工修改createts.sql中表结构定义,定义为gbk

3、 停止服务,导出所有记录 

[root@blog etc]# mysqldump -uroot –p*** –quick –no-create-info –extended-insert –default-character-set=gb2312 luoxuan > data.sql

4、 修改data.sql文件,增加或修改为SET NAMES GBK

5、 新建数据库

mysql> create database xiyan default charset gbk;  
Query OK, 1 row affected (0.00 sec) 

6、 导入表

[root@blog etc]# mysql -uroot –p***  xiyan < createts.sql 

7、 导入数据

[root@blog etc]# mysql -uroot –p***  xiyan < data.sql 

8、 检查

mysql> use xiyan;  
Database changed  
mysql> show tables;  
+—————–+  
| Tables_in_xiyan |  
+—————–+  
| test_charset    |  
+—————–+  
1 row in set (0.00 sec)  
mysql> select * from test_charset;  
+—+——+  
| i | name |  
+—+——+  
| 1 | 李杰 |  
| 2 | ??   |  
+—+——+  
2 rows in set (0.00 sec)  
 
再执行插入:  
insert into test_charset values(2,’郎郎’);  
mysql> select * from test_charset;  
+—+——+  
| i | name |  
+—+——+  
| 1 | 李杰 |  
| 2 | ??   |  
| 3 | 郎郎 |  
+—+——+  
3 rows in set (0.00 sec) 

觉得文章有用?立即: 和朋友一起 共学习 共进步!

猜您喜欢

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>