官方文档地址:
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 LIKEcollation%’;
HEX、LENGTH、CHAR_LENGTH #SQL函数
CHARSET、COLLATION #SQL函数

乱码总结

  1. 客户端的数据格式与声明的 character_set_client不符 例如: <charset gbk>
  2. character_set_results与客户端页面不符合的时候 <charset=gbk>
    避免乱码问题:
客户端页面  ==  character_set_client  ==  character_set_results  == character_set_connection == character_set_database == character_set_server

修改字符集

  1. set names utf8; 与如下效果相同
    SET character_set_client=’utf8’;
    SET character_set_connection=’utf8’;
    SET character_set_results=’utf8’;

  2. 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会丢失

数据备份恢复的字符集设定

  1. 物理备份恢复基本ok
  2. 逻辑备份
    Gbk表+utf8表混合在一起,使用binary(二进制)备份恢复
    字符集变更了,使用逻辑备份恢复方式,否则直接ddl可能导致数据丢失。
    跨版本升级的-逻辑备份恢复数据
    数据恢复的时候加mysqldump参数default_charectar_set=utf8/gbk逻辑备份的时候一定要保持一致,

更多相关文章

  1. MySQL数据库总结(8)字符集与校对集
  2. 在MySQL数据库中存储无法访问的用户
  3. MySQL是一个非常流行的小型关系型数据库管理系统
  4. MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
  5. 有没有一种方法可以在不破坏外键依赖关系的情况下将MySQL数据库
  6. 数据库中的结果分页如何工作?
  7. MySQL-数据库安装及基本SQL语句
  8. mysql去除严格模式/插入数据库遇到重复保证唯一
  9. MySQL数据库离线包安装与注册

随机推荐

  1. Android Studio 1.5 opencv开发
  2. Android(安卓)快捷键
  3. Android Java执行Shell命令
  4. Android构建工具Gradle知识1
  5. Android USB/MTP相关实现
  6. android 界面布局 很好的一篇总结 【转】
  7. android面试题整理(2)
  8. 配置Qt Creator for Android
  9. Android Intent个人介绍
  10. Android 下的图片选择与裁剪开源库