Mysql字符集问题
1、mysql字符集乱码问题
参考这个博客的介绍内容https://www.cnblogs.com/digdeep/p/5228199.html,
一般设置SET NAMES = ‘XXX’即可统一字符集
2、mysql表字符集修改
针对的是已有数据的库更改字符集,主要分为以下几步,以下模拟从latin1到GBK字符集的操作过程
- 导出表结构
mysqldump –uroot –p –-default-character-set=gbk –d databasename > createtab.sql
2.手工修改createtab.sql中的表结构定义的字符集为新的字符集
3.确保记录不再更新,导出所有记录
mysqldump –uroot –p –-quick –-no-create-info –-extended-insert –-default-character-set=latin1 databasename > data.sql
其中—quick用于导出大数据量,不缓存查询结果
--extende-insert使用多value的insert扩展语法,减小文件体积,加速插入
--no-create-info不导出表结构
--default-character-set=latin1使用原来的字符集导出所有数据,保证数据不乱码
4.打开data.sql ,将SET NAMES ‘latin1’ 修改成 SET NAMES ‘gbk’
5.使用新的字符集创建数据库
create dtabase databasename default charset gbk
6.创建表,执行createtab.sql
mysql –uroot –p databasename < createtab.sql
7.导入数据,执行data.sql
mysql –uroot –p databasename < data.sql
注意:
1、修改之后的字符集最好是源字符集的超集,或者说字库更大,否则如果更小的话,目标字符集中不支持的字符导入后会变成乱码,丢失一部分数据
2、使用alter database character set *** 或者 alter table tablename character set *** 命令无法更新已有记录的字符集,只对新创建的表和记录有效,已有记录只能通过先将数据导出,再通过适当调整重新导入后才可完成