mysql字符集问题
字符集是一套文字符号及其编码、比较规则的集合
mysql数据库字符集包括字符集(character)和校对规则(collation),其中字符集定义mysql数据字符串的存储方式,校对规则定义比较字符串的方式。
常见字符集 |
长度 |
说明 |
Gbk |
2 |
不是国际标准 |
Utf-8 |
3 |
中英文混合建议,目前使用较多 |
Latin1 |
1 |
mysql默认字符集 |
Utf8mb4 |
4 |
Utf-8 unicode 移动互联网 |
如果处理各种各样的文字发布到不同国家地区,应选择utf-8
如果只需支持中文,并且数据量大性能要求高,可选GBK
处理移动互联网,可能需要使用utf8mb4
字符集总结:
1.客户端设置set names 字符集、mysql命令指定字符集登录(临时修改client、connection和results的结果),可以确保插入后的中文不会出现乱码,但是两种方式都是临时生效,且对设置之前插入的中文无效
2.在mysql的my.cnf配置文件[client]模块下设置default-character-set=字符集,相当于set names 字符集,且永久生效,且无需重启服务,对设置之前插入的中文无效
3.在mysql的my.cnf配置文件[mysqld]模块下设置character-set-server=字符集,重启后生效后,之后创建的数据库和表默认都是这个字符集,对设置之前插入的中文无效
修改字符集
alter database 库名 character set 字符集,对数据库中新建的表的字符集进行修改
alter table 表名 character set 字符集,对表中新插入记录的字符集进行修改
对于已有数据的数据库,必须先将数据导出,修改字符集后再进行导入
1.导出建库及建表语句,sed批量修改为对应字符集
2.导出所有mysql数据
3.修改mysql服务端和客户端编码为对应字符集,重启服务
4.删除原有的库、表及数据
5.导入新的建库及建表语句
6.导入所有数据