当前位置: 首页 > news >正文

mysql中横竖转换_mysql数据库字符编码总结--数据传输编码

概述

前面分享了mysql数据库字符编码中的数据存储编码,今天主要介绍下数据传输编码方面的内容,看完后大家应该对mysql数据库字符编码的策略很清楚了。


01

名词解释

1、character_set_client:客户端数据解析、编码的字符集。

2、character_set_connection:连接层字符集。

3、character_set_server:服务器内部操作字符集。

4、character_set_results:查询结果字符集。

5、character_set_database:当前数据库的字符集。

6、character_set_system:系统源数据(字段名等)字符集。

注:

1、还有以collation_开头的同上面对应的变量,用来描述字符序。

2、服务端编码、解析时,是按照前一环节的编码进行解析的,按照各自的字符集进行编码的。

3、character_set_server是mysql数据库内存的操作字符集。如果创建数据库时,没有指定数据库的字符集,则使用character_set_server的字符集作为默认字符集;如果创建表时,没有指定表的字符集,则使用character_set_database的字符集作为默认字符集;如果在创建字段时,没有指定字段的字符集,则使用表的字符集作为默认字符集。

4、set names gbk;等同于同时设置character_set_client,character_set_connection,character_set_results这三个字符集。


MySQL的客户端可以分为两种:一种就是用C语言写的官方客户端——MySQL命令程序;一种就是平常程序员使用JDBC等connector API写成的客户端。这里以第一种做分析,分成windows和Linux两个层面。

daf8cb6fb718b7b7ff9a9c5e99106fa8.png

02

Windows客户端

MySQL命令程序在Windows和Linux系统中关于字符编码处理的部分并不等效,下图是Windows系统的客户端字符编码转换逻辑:

0de39eb0c7173c01ffd06a64effe05bf.png

其中的三个character变量存在于服务器上,而charset_info存在于客户端。

当客户端启动连接到服务器时,客户端将根据配置参数设置charset_info为指定编码,同时通知服务器让服务器把三个character变量设置为相同编码。

WINDOWS客户端数据传输流程:

1)客户端从控制台标准输入读取一行命令文本,其编码为操作系统编码;

2)客户端将命令从系统编码转码为客户端charset_info变量设定的编码;

3)客户端将命令文本发送给服务器;

4)服务器把收到的文本解码为character_set_client编码,这个编码通常与客户端charset_info一致;

5)服务器把命令文本转码为character_set_connection;

6)服务器执行命令,产生结果;

7)将结果转码为character_set_results发送给客户端;

8)客户端把收到的结果解码为charset_info编码,这个编码通常与character_set_results一致;

9)客户端将结果转码为操作系统编码,输出到控制台标准输出。

由于在Windows平台上MySQL程序在读取控制台时使用了Unicode Console Read API,所以程序从控制台获取的原始字符串实际上是UTF16编码,所以这里的“操作系统编码”并不是Windows通常的GBK,而应该看做UTF16。


03

Linux客户端

下图是Linux系统中的MySQL客户端程序字符编码转换逻辑:

ba05ae10790e9b0b003f2ac52d3136f6.png

它与Windows版的不同之处就在于,它并不把来自终端标准输入的操作系统编码字符串强制转换为charset_info编码,也不会把输出到终端的charset_info编码结果字符串强制转换为操作系统编码。

也就是说,Linux平台的MySQL程序这时候会会忽略charset_info变量。当然,这样一来Linux客户端的数据传输流程就比Windows客户端对应地少几步。


其实字符集出现乱码的地方最大可能在两个地方,character_set_client和character_set_results。如果这两个地方的编码个客户端编码不一致会乱码。数据有可能存都存不进去。最好老老实实不要乱设置character_set_client这些值。如果能保持所有的都是utf8,那肯定没问题。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下!

ee7935fddfb8f3fa75141cc58198b605.png

相关文章:

  • 模式代码 java中aes_建造者模式和原型模式在开源代码中的应用
  • form表ge实例 html_从零开始学Vue(二~三)—— Vue 实例 / 模板语法(插值、指令)...
  • python 图像宽度_在python中创建具有一定宽度边框的图像
  • print输出 pytorch_60题PyTorch简易入门指南,做技术的弄潮儿??
  • 如何使用conda安装的nvcc_防爆配电箱如何安装、使用?
  • c语言两个for语句并列执行_5.8 C语言for循环
  • mmsi是代表船舶什么_船舶检查过程中, 会遇到哪些问题? 如何解决?
  • 金税盘显示frm000013_征期提醒 金税盘、税控盘常见那些事
  • 如何给按钮添加背景图片_如何在 Ubuntu 18.04 的右键单击菜单中添加“新建文档”按钮...
  • 印象笔记三级目录_印象笔记使用技巧-第一篇(面向新手)
  • 气象ts评分_基于评分最优化的模式降水预报订正算法对比-中国气象科学研究院.pdf...
  • invalid signature什么意思_讨论记录用随机森林对生存数据降维,筛选signature
  • 扩展 php_memcached的PHP扩展安装使用
  • 人均劳动生产率的计算方法_劳动生产率是怎么计算的
  • 分子动力学aimd_CP2K教程系列之第一性原理分子动力学(Pymatflow篇)
  • SegmentFault for Android 3.0 发布
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 4个实用的微服务测试策略
  • AWS实战 - 利用IAM对S3做访问控制
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Computed property XXX was assigned to but it has no setter
  • es6--symbol
  • express.js的介绍及使用
  • maven工程打包jar以及java jar命令的classpath使用
  • October CMS - 快速入门 9 Images And Galleries
  • tab.js分享及浏览器兼容性问题汇总
  • 构建二叉树进行数值数组的去重及优化
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于游标的分页接口实现
  • 我是如何设计 Upload 上传组件的
  • 小而合理的前端理论:rscss和rsjs
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 怎样选择前端框架
  • 大数据全解:定义、价值及挑战
  • $$$$GB2312-80区位编码表$$$$
  • $L^p$ 调和函数恒为零
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (学习日记)2024.01.19
  • (转)socket Aio demo
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .sdf和.msp文件读取
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @FeignClient注解,fallback和fallbackFactory
  • @SuppressWarnings注解
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [CSS]中子元素在父元素中居中
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [Gym-102091E] How Many Groups