mysql字符集浅谈
2015-07-08 16:24
531 查看
官方文档地址:
http://dev.mysql.com/doc/refman/5.6/en/globalization.html
假设有两个字符A B,然后对A编码为0,B编码为1.那么字符串”AABBB”编码后就是”00111”,就形成了字符集.
通常数据库的字符集编码包括utf8(国际)gbk(中文)latin1(拉丁1版本)
避免乱码问题:
SET character_set_client=’utf8’;
SET character_set_connection=’utf8’;
SET character_set_results=’utf8’;
My.cnf 里面:
数据丢失 utf8->gbk->latin1 utf8迁移到gbk会丢失,gbk迁移到latin会丢失
逻辑备份
Gbk表+utf8表混合在一起,使用binary(二进制)备份恢复
字符集变更了,使用逻辑备份恢复方式,否则直接ddl可能导致数据丢失。
跨版本升级的-逻辑备份恢复数据
数据恢复的时候加mysqldump参数
http://dev.mysql.com/doc/refman/5.6/en/globalization.html
查看数据库状态
mysql> status; -------------- mysql Ver 14.14 Distrib 5.6.13, for Linux (x86_64) using EditLine wrapper Connection id: 2 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.6.13-log Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /usr/local/mysql/mysql.sock Uptime: 20 min 53 sec Threads: 2 Questions: 6 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 63 Queries per second avg: 0.004 --------------
查看当前数据库字符集
mysql> show variables like '%character%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.01 sec)
字符集编码:
简单举个不太恰当的例子说明假设有两个字符A B,然后对A编码为0,B编码为1.那么字符串”AABBB”编码后就是”00111”,就形成了字符集.
通常数据库的字符集编码包括utf8(国际)gbk(中文)latin1(拉丁1版本)
mysql有6个关键位置使用了字符集
Client 前端编码<charset =utf-8> 客户端 Connection 连接编码url ip..?charset=utf8 Database 数据库编码 Results 返回客户端的编码 Server install 安装时候指定的编码 System os操作系统编码
检测字符集的方法
SHOW CHARACTER SET; #包括哪些编码类型 SHOW COLLATION; SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE ‘collation%’; HEX、LENGTH、CHAR_LENGTH #SQL函数 CHARSET、COLLATION #SQL函数
乱码总结
客户端的数据格式与声明的character_set_client不符 例如:
<charset gbk>
character_set_results与客户端页面不符合的时候
<charset=gbk>
避免乱码问题:
客户端页面 == character_set_client == character_set_results == character_set_connection == character_set_database == character_set_server
修改字符集
set names utf8; 与如下效果相同SET character_set_client=’utf8’;
SET character_set_connection=’utf8’;
SET character_set_results=’utf8’;
My.cnf 里面:
#保证和数据库编码一致,当mysql客户端链接过来时候,不管是什么字符集,都会按server字符集存储,保证数据库字符集一致 skip-character-set-client-handshake #链接默认字符集 init-connect='SET NAMES utf8' #整个数据库字符集 character-set-server=utf8
字符集转换过程
数据迁移中的字符集
保证两个数据库的字符集是一样的,通过SHOW VARIABLES LIKE 'character%';查看
数据丢失 utf8->gbk->latin1 utf8迁移到gbk会丢失,gbk迁移到latin会丢失
数据备份恢复的字符集设定
物理备份恢复基本ok逻辑备份
Gbk表+utf8表混合在一起,使用binary(二进制)备份恢复
字符集变更了,使用逻辑备份恢复方式,否则直接ddl可能导致数据丢失。
跨版本升级的-逻辑备份恢复数据
数据恢复的时候加mysqldump参数
default_charectar_set=utf8/gbk逻辑备份的时候一定要保持一致,
相关文章推荐
- LeetCode_Mysql_Second Highest Salary
- mysql 操作备忘
- mysql开发之---每日一得01
- java代码--mysql数据的备份和还原
- 查看MYSQL数据库中所有用户及拥有权限
- mysql 死锁检查
- mysql索引原理相关问题
- MySQL的字符串函数截取字符
- mysql jdbc
- mysql 5.6.25安装
- MySql的连接管理与安全性
- 记录一个mysql按日期分组统计的查询
- 使用Mysql Merge存储引擎实现分表
- MySQL读取中文乱码的问题。
- Mysql技术内幕——InnoDB存储引擎
- Mysql技术内幕——InnoDB存储引擎
- Mac下MySQLWorkbench导入已有数据库的方法
- mysql中统计精度问题
- mysql概念解释
- mysql主从复制之新库