• 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逻辑备份的时候一定要保持一致,
  • 相关阅读:
    30:第三章:开发通行证服务:13:开发【更改/完善用户信息,接口】;(使用***BO类承接参数,并使用了参数校验)
    react基本使用、jsx语法介绍
    python-opencv 之开运算、闭运算、形态学梯度、“礼帽”和“黑帽”
    iOS小技能:iOS15崩溃排查技巧(symbolicatecrash符号化分析问题、导出和隐藏符号)
    Linux根文件系统说明和常用命令
    网络安全(黑客)自学
    银行数据中心绿色发展新格局:建设全闪数据中心
    Docker系列第05部分:实战部署应用全流程
    Python中协程异步IO(asyncio)理解与入门
    Aware依赖注入管理
  • 原文地址:https://blog.csdn.net/liuliuhelingdao/article/details/126831121