Mysql修改数据库的字符集

----修改数据库字符集的一个原则是:新的字符集包含的字库要>=原有的字符集字库,否则已经存在的数据可能会变为乱码。

如果数据库中暂时还没有数据,那么我们可以直接执行命令。假如此时数据库中有表,那么表的字符集是不会随着数据库的字符集更改而更改的。

alter database dbname character set charset_name

假如数据库中存在有数据,其实也可以执行这个命令,但是会遗留一个问题,也就是之前已经存在的数据的表的字符集,而只是对新加的表或者记录生效。

此时我们可以通过另外的方法来将字符集进行修改。

模拟环境,模拟将数据库A的字符集从latin1修改为gbk(下面语句中的参数具体含义请自行查找)

1.export目前A数据库中已经存在的表结构(目前A数据库中存在表a)

mysqldump -uroot -p --default-character-set=gbk -d A >table_create.sql

2.手动将table_create.sql中的表结构的字符集为gbk

具体是:

CREATE TABLE `a` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

3.确认应用程序已经不再修改A数据库中所有表的数据,再export所有的数据

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set =latin1 A>A_data.sql

4.打开A_data.sql,将其中的SET NAMES latin1修改为SET NAMES gbk.

/*!40101 SET NAMES gbk */;

5.将以前的数据库删除掉

6.使用新的字符集来创建同名数据库

create database A default charset gbk;

7.使用table_create.sql来创建表

mysql -uroot -p A <table_create.sql

8.import数据,使用A_data.sql

mysql -uroot -p A <A_data.sql

至此,我们就已经完整的将A数据库的字符集从latin1修改为gbk