变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码。

2. 写入语句在发送到 MySQL 服务端之前的编码由 CHARACTER_SET_CONNECTION 决定,假设此时编码为 B。

3. 经过 MySQL 一系列词法,语法解析等处理后,写入到表 t1,表 t1 的编码为 C。

那这里编码 A、编码 B、编码 C 如果不兼容,写入的数据就直接乱码。

二、客户端乱码

表数据正常,但是客户端展示后出现乱码。

这一类场景,指的是从 MySQL 表里拿数据出来返回到客户端,MySQL 里的数据本身没有问题。客户端发送请求到 MySQL,表的编码为 D,从 MySQL 拿到记录结果传输到客户端,此时记录编码为 E(CHARACTER_SET_RESULTS)。

那以上编码 E 和 D 如果不兼容,检索出来的数据就看起来乱码了。但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。

这一类又分为以下三个不同的小类:

1)字段编码和表一致,客户端是不同的编码

比如下面例子, 表数据的编码是 utf8mb4,而 SESSION 1 发起的连接编码为 gbk。那由于编码不兼容,检索出来的数据肯定为乱码。

2)表编码和客户端的编码一致,但是记录之间编码存在不一致的情形

比如表编码是 utf8mb4,应用端编码也是 utf8mb4,但是表里的数据可能一半编码是 utf8mb4,另外一半是 gbk。那么此时表的数据也是正常的,不过此时采用哪种编码都读不到所有完整的数据。这样数据产生的原因很多,比如其中一种可能性就是表编码多次变更而且每次变更不彻底导致(变更不彻底,我之前的篇章里有介绍)。举个例子,表 t3 的编码之前是 utf8mb4,现在是 gbk,而且两次编码期间都被写入了正常的数据。

3)每个字段的编码不一致,导致乱码和第二点一样的场景。不同的是:非记录间的编码不统一,而是每个字段编码不统一。举个例子,表 c1 字段 a1,a2。a1 编码 gbk,a2 编码是 utf8mb4。那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。

三、LATIN1

还有一种情形就是以 LATIN1 的编码存储数据

估计大家都知道字符集 LATIN1,LATIN1 对所有字符都是单字节流处理,遇到不能处理的字节流,保持原样,那么在以上两种存入和检索的过程中都能保证数据一致,所以 MySQL 长期以来默认的编码都是 LATIN1。这种情形,看起来也没啥不对的点,数据也没乱码,那为什么还有选用其他的编码呢?原因就是对字符存储的字节数不一样,比如 emoji 字符 "❤",如果用 utf8mb4 存储,占用 3 个字节,那 varchar(12) 就能存放 12 个字符,但是换成 LATIN1,只能存 4 个字符。

mysql 提交乱码问题_mysql数据库乱码问题相关推荐

  1. mysql 乱码 越南_mysql数据库乱码之保存越南文乱码解决方法

    我自己测试一下,很多字符变成了 '?'. 数据库连接已经是使用了 utf8 字符集: 复制代码 代码如下:define("MYSQL_ENCODE", "UTF8&quo ...

  2. mysql 数据库乱码_Mysql数据库乱码问题的对应方式

    MySQL中数据库乱码一般进行字符集的设定即可,但是乱码可以出现在各个阶段,所以这篇文章整理一下乱码出现的各个阶段以及对应方法. 建库/建表时添加charset设定 建库 CREATE DATABAS ...

  3. mysql 数据库乱码_mysql数据库乱码

    无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题.下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决. mysql可以支持多种字符集.在同一个数据库的不同表,同一个表中的不同字 ...

  4. mysql中文乱码解决方案_Mysql中文乱码解决方案

    Mysql中文乱码解决方案 时间:2017-07-11     来源:华清远见JAVA学院 中文乱码问题一直是我们编程过程中比较常见又让人头疼的问题,但是只要按照标准进行配置,就能很好的避免出现中文乱 ...

  5. mysql 乱码 越南_MySQL_mysql数据库乱码之保存越南文乱码解决方法,我自己测试一下,很多字符变 - phpStudy...

    mysql数据库乱码之保存越南文乱码解决方法 我自己测试一下,很多字符变成了 '?'. 数据库连接已经是使用了 utf8 字符集: define("MYSQL_ENCODE", & ...

  6. mysql特殊字符波浪号_mysql数据库特殊字符

    关于 mysql数据库特殊字符的搜索结果 回答 详细解答可以参考官方帮助文档 说明 部分RDS for MySQL实例的账号管理机制已升级.使用本文前,请先检查您的实例是否已升级,检查方式如下: 登录 ...

  7. mysql 创建查询 删除_MYSQL数据库查询删除创建企业基本知识

    数据查询语言(DQL)从表中获取数据 select  + where (位置)  order by(排序)  group by  haveby 查询用户:select user,host,passwo ...

  8. mysql leave的作用_MySQL数据库中DELIMITER的作用

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...

  9. mysql delimiter的作用_MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

最新文章

  1. Spring之事务管理配置
  2. Redis cluster日常管理【一】
  3. 吴恩达《Machine Learning》精炼笔记 10:异常检测
  4. springboot学习笔记(十)
  5. php 公钥格式转换,如何把OpenSSH公钥转换成OpenSSL格式
  6. 苏杰专访:产品创新好方向=几十年不变的需求+硬科技赋能
  7. 商业认知,在投资的时候,为什么别人是经常赚钱,而你却是亏损不断,让我们亏损的根源是什么?
  8. 【VUE】vue在vue-cli3环境下基于axios解决跨域问题
  9. google海底光缆图_感受技术震撼:全球海底光缆分布图详解(附源地图链接)
  10. CA SDK 使用简介
  11. vue 实现文字转语音
  12. Python函数知识点(详解)
  13. 七阶拉丁方阵_关于拉丁方阵教学的思考
  14. 康耐视VisionPro
  15. 计算机教学管理,计算机教育教学管理论文
  16. 国标GB/T28181视频流媒体网页无插件直播服务4G摄像头无插件直播国标GB28181协议注册、心跳和注销协议说明介绍
  17. linux如何查看哪个串口是真实串口,哪个串口
  18. 浅谈MIL、SIL、PIL、HIL
  19. 机关值班php代码,机关事业单位值班制度
  20. 如果拿破仑年轻时没有经历过窘迫而绝望的生活

热门文章

  1. mysql 插入优化_MySQL批量SQL插入性能优化
  2. c语言输出行末不得有多于空格,新人提问:如何将输出时每行最后一个空格删除...
  3. 鸿蒙空间是什么星辰变,飞升之后做什么《星辰变》神魔妖界收伏奇珍异兽
  4. MUI 拍照和从系统相册选择图片上传
  5. 描述一下JAVA的加载过程_JVM源码分析之Java类的加载过程
  6. navicat运行db文件_使用 YAML 文件配置 Jenkins 流水线
  7. mysql是gplv3,Affero-GPL和GPLv3之间的区别
  8. flume连接kafka_日志收集系统架构设计:(flume+zookeeper+kafka+php+mysql )
  9. 17 - 引用类型比较内容
  10. mysql主从报错_Mysql主从报错锦集