• mysql字符集浅谈


    查看数据库状态

    1. mysql> status;
    2. --------------
    3. mysql Ver 14.14 Distrib 5.6.13, for Linux (x86_64) using EditLine wrapper
    4. Connection id: 2
    5. Current database:
    6. Current user: root@localhost
    7. SSL: Not in use
    8. Current pager: stdout
    9. Using outfile: ''
    10. Using delimiter: ;
    11. Server version: 5.6.13-log Source distribution
    12. Protocol version: 10
    13. Connection: Localhost via UNIX socket
    14. Server characterset: utf8
    15. Db characterset: utf8
    16. Client characterset: utf8
    17. Conn. characterset: utf8
    18. UNIX socket: /usr/local/mysql/mysql.sock
    19. Uptime: 20 min 53 sec
    20. Threads: 2 Questions: 6 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 63 Queries per second avg: 0.004
    21. --------------
    • 1

    查看当前数据库字符集

    1. mysql> show variables like '%character%';
    2. +--------------------------+----------------------------------+
    3. | Variable_name | Value |
    4. +--------------------------+----------------------------------+
    5. | character_set_client | utf8 |
    6. | character_set_connection | utf8 |
    7. | character_set_database | utf8 |
    8. | character_set_filesystem | binary |
    9. | character_set_results | utf8 |
    10. | character_set_server | utf8 |
    11. | character_set_system | utf8 |
    12. | character_sets_dir | /usr/local/mysql/share/charsets/ |
    13. +--------------------------+----------------------------------+
    14. 8 rows in set (0.01 sec)
    • 1

    字符集编码:

    简单举个不太恰当的例子说明
    假设有两个字符A B,然后对A编码为0,B编码为1.那么字符串”AABBB”编码后就是”00111”,就形成了字符集.
    通常数据库的字符集编码包括utf8(国际)gbk(中文)latin1(拉丁1版本)

    mysql有6个关键位置使用了字符集

    1. Client 前端编码<charset =utf-8> 客户端
    2. Connection 连接编码url ip..?charset=utf8
    3. Database 数据库编码
    4. Results 返回客户端的编码
    5. Server install 安装时候指定的编码
    6. System os操作系统编码
    • 1

    检测字符集的方法

    1. SHOW CHARACTER SET; #包括哪些编码类型
    2. SHOW COLLATION;
    3. SHOW VARIABLES LIKE 'character%';
    4. SHOW VARIABLES LIKEcollation%’;
    5. HEX、LENGTH、CHAR_LENGTH #SQL函数
    6. CHARSET、COLLATION #SQL函数
    • 1

    乱码总结

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

    修改字符集

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

    2. My.cnf 里面:

    1. #保证和数据库编码一致,当mysql客户端链接过来时候,不管是什么字符集,都会按server字符集存储,保证数据库字符集一致
    2. skip-character-set-client-handshake
    3. #链接默认字符集
    4. init-connect='SET NAMES utf8'
    5. #整个数据库字符集
    6. character-set-server=utf8
    • 1

    字符集转换过程

    数据迁移中的字符集

    保证两个数据库的字符集是一样的,通过SHOW VARIABLES LIKE 'character%'; 查看
    数据丢失 utf8->gbk->latin1 utf8迁移到gbk会丢失,gbk迁移到latin会丢失

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

    1. 物理备份恢复基本ok
    2. 逻辑备份
      Gbk表+utf8表混合在一起,使用binary(二进制)备份恢复
      字符集变更了,使用逻辑备份恢复方式,否则直接ddl可能导致数据丢失。
      跨版本升级的-逻辑备份恢复数据
      数据恢复的时候加mysqldump参数default_charectar_set=utf8/gbk逻辑备份的时候一定要保持一致,
  • 相关阅读:
    基于ssm的大学生心理健康系统设计与实现
    iOS经典面试题之深入解析分类Category的本质以及如何被加载
    Nginx补充部分--IO模型
    MySQL基础篇【第六篇】| 存储引擎、事务、索引、视图、DBA命令、数据库设计三范式
    大数据-Storm流式框架(六)---Kafka介绍
    【MySQL系列】- MySQL自动备份详解
    [附源码]Python计算机毕业设计宠物寄养管理系统
    计算机网络基础 ---- 动态路由---OSPF协议----详解
    前后端分离项目----BlogSystem
    docker启动镜像命令
  • 原文地址:https://blog.csdn.net/liuliuhelingdao/article/details/126831121