插入数据时和读取数据时编码转换原理如图所示
(我设置客户端传入和传回编码是一回事---这是告诉连接器的,客户端具体给什么编码和以什么方式解读是另一回事,不一致就会出现插入失败和乱码)
乱码时的两种情况:
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完成