zoukankan      html  css  js  c++  java
  • 数据库之插入数据时和读取数据时编码转换原理和乱码出现的原因

    插入数据时和读取数据时编码转换原理如图所示

    (我设置客户端传入和传回编码是一回事---这是告诉连接器的,客户端具体给什么编码和以什么方式解读是另一回事,不一致就会出现插入失败和乱码)

    乱码时的两种情况:

    1.我设置客户端传入编码是utf8,连接器utf8,服务器utf8
          但客户端传入gbk编码的汉字,将GBK认为是utf8的过程压根就会出错,如果检验不严格也可能通过,但会出现数据丢失(后来再读出时也出现乱码情况)

    2.我设置传回客户端的编码是utf8,连接器从服务器中读出数据转换成utf8传回客户端,但是客户端将utf8的编码认为是GBK编码解读从而出现乱码

    ------------------------------------------------------

    网页设置为utf8编码,传入应该没有问题,mysql客户端编码是gbk所以会插入失败,传回汉字时时乱码(将传入和传回设为gbk就行了)
    总结:这两种情况都是客户端说话不算话造成的,实际传入编码和设置不一致,解读方式和设置传回编码不一致。

    -------------------------------------------------------------------------------------------------------------------------------------------------

    *.连接器设置为latin1,客户端传入设置为gbk,给的也是gbk编码,设置传回为gbk,以GBK编码解读,但会出现乱码
    这是由于编码大的兼容小的,gbk编码多,latin1编码少,所以会丢失数据造成乱码
    总结:编码空间大小==> 服务器>=connection>=client
    *.在mysql客户端中暂时设置编码格式使传入,传回,连接器编码一致可以用set names gbk完成

  • 相关阅读:
    Springboot源码 bean的注册
    Vue源码之 watch
    Vue源码之 slot
    Vue computed 的嵌套
    Vue的子组件绑定的方法中传入自定义参数
    Vue源码之 Vue的生命周期
    Vue源码之-----computed
    Vue源码之----为什么Vue中Array的pop,push等方法可以reactive,而Array[0]='a'这样的方法不会reactive?
    ReSharper 8.1支持Visual Studio 2013的特色——超强滚动条
    Python开发环境Wing IDE使用教程:部分调试功能介绍
  • 原文地址:https://www.cnblogs.com/abtious/p/13486576.html
Copyright © 2011-2022 走看看