- 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版本)
- 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不符 例如: character_set_results与客户端页面不符合的时候 客户端页面 == 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会丢失
default_charectar_set=utf8/gbk逻辑备份的时候一定要保持一致,