----修改数据库字符集的一个原则是:新的字符集包含的字库要>=原有的字符集字库,否则已经存在的数据可能会变为乱码。
如果数据库中暂时还没有数据,那么我们可以直接执行命令。假如此时数据库中有表,那么表的字符集是不会随着数据库的字符集更改而更改的。
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