| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql5-3-mysql的编码问题charset=utf8 -> 正文阅读 |
|
[大数据]mysql5-3-mysql的编码问题charset=utf8 |
参考mysql编码问题——charset=utf8你真的弄明白了吗? 1 明确问题1.1 什么是字符集所有数据在计算机底层都是以二进制形式保存。 将字符比如汉字转换为二进制的过程,称为编码。 编码和解码时采用的规则,就是字符集。 (1)美国常用字符集:ASCII (2)欧洲常用字符集:ISO-8895-1 (3)中国简体字字符集:GBK (5)包含世界上所有语言和字符的字符集是Unicode万国码 开发人员一般使用utf8mb4字符集 所谓容量,这里指用几个字节表示一个字符,显然用的字节越多,编码空间越大,能表示更多不同的字符,也即容量越大。 1.2 查看数据库默认字符集
(1)查看数据库支持的所有的字符集。 1.3 当前电脑使用的字符集打开电脑黑窗口(CMD),接着在空白边框点击鼠标右键,然后选择属性,并查看"选项"这一栏。可以看到CMD中输入文字使用的字符编码是GBK。 1.4 建表语句引出的问题
(1)建表时指定charset=utf8
1.5 定位问题
2 连接器2.1 连接器的作用与工作流程一、连接器的作用 二、连接器的工作流程 (2)接着,连接器再次转换成服务器需要的编码,并最终存储在服务器中。 (3)然后,服务器返回的结果,再次先通过连接器,连接器将其转化为与客户端一致的字符集,就可以在客户端正常显示了。 2.2 连接器的字符集是UTF8
假如说连接器的字符集是UTF8,这个写入数据库的过程是怎么进行的呢? (2)接着,连接器发现mysql服务器使用的字符集,与自身字符集完全一致,都是UTF8。于是,直接发给mysql服务器,进行最终的存储。 当我们从mysql服务器查数据的时候,返回过程又是怎么进行的呢? 2.3 连接器的字符集是GBK
(2)接着,当字符通过连接器发送给mysql服务器进行存储的时候,发现mysql服务器的字符集是UTF8,与自身的字符集GBK并不一致。因此,连接器此时又会进行"字符集的自动转换",将以GBK进行编码的字符转换为以UTF8格式的编码,转换完成以后,再次发送给mysql服务器,进行最终的存储。 当我们从mysql服务器查数据的时候,返回过程又是怎么进行的呢? 3 代码演示过程
要想不乱码,需要指定客户端的编码,让连接器不理解错误,这样就不会存入错误数据。 3.1 连接器字符集UTF8一、当前的情况是:客户端是GBK,服务器最终存储的是UTF8。
二、我的客户端是GBK,但是我偏要骗对方是UTF8。
三、我偏要对方返回给我的数据是UTF8。
3.2 连接器字符集GBK一、client、connection、server字符集设置的都是GBK,不会导致乱码。
插入中文数据
插入中文数据
3.3 产生乱码的两个原因(1)解码与实际编码,不一致导致的乱码,可修复。 (2)在传输过程中,由于编码不一致,导致部分字节丢失,造成的乱码,不可修复。 4 系统默认情况
上述设置,是不是和图二中的情况,非常相似。唯一不同的就是系统默认mysql服务器的字符集是latin1,而图二中mysql服务器的字符集是utf8。 为什么要这么设置呢?因为latin1不支持中文,当我们插入中文的时候,当客户端发送过去的字符,通过连接器,最后发送给mysql服务器的时候,连接器发现mysql服务器采用的字符级是latin1,字符集由gbk转化为latin1,就相当于大鱼过小渔网一样,一定会掉肉,而对于字符集来说就会丢失字节。丢失字节后存入的值,肯定也就是错误的,不正确的。 由于mysql的检测是很严格的,既然你存入的时候都会丢失字节,那么存入的值肯定也是错误的,因此,我索性就不让你插入。“这就是我们不设置mysql服务器字符集,想要插入中文,提示1366错误的原因。”"ERROR 1366 (HY000): Incorrect string value: ‘\xD5\xC5\xC8\xFD’ ““for column ‘sname’ at row 1” 当我们使用"charset=utf8"命令,将mysql服务器的字符集设置为utf8后,由于utf8是支持中文的,utf8是变长字符集,它能够支持全世界所有国家的语言。因此,当你输入一个以gbk格式编码的中文,在utf8中肯定是也有自己的一套编码格式,显示同样的文字(只不过此时是以utf8编码的)。 最后用一个不那么恰当的比喻,来说明字符集编码。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:04:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |