Mysql字符集问题

1、mysql字符集乱码问题

参考这个博客的介绍内容https://www.cnblogs.com/digdeep/p/5228199.html

一般设置SET NAMES = ‘XXX’即可统一字符集

2、mysql表字符集修改

针对的是已有数据的库更改字符集,主要分为以下几步,以下模拟从latin1到GBK字符集的操作过程

  1. 导出表结构

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 *** 命令无法更新已有记录的字符集,只对新创建的表和记录有效,已有记录只能通过先将数据导出,再通过适当调整重新导入后才可完成