• mysql 编码测试


    insert into t1(v1) values('cn中国');
    select * from t1;

    1、输入gbk,交互latin1,数据库latin1
    insert,客户端把gbk的输入当成latin1来解释,传给服务,服务不需要转码,把gbk当成latin1存入数据库,显示乱码。
    select,服务不转码,返回给客户端,客户端latin1当成gbk解释,显示正确。
    2、输入gbk,交互latin1,数据库gbk
    insert 报错:ERROR 1366 (HY000): Incorrect string value: 'xD6xD0xB9xFA' for column 'v1' at row 1
    原因是:客户端把gbk的输入当成latin1来解释,传给服务,服务转码,把latin1转化为gbk,出错。
    3、输入gbk,交互latin1,数据库utf8
    和1一样,这是因为utf8英文字符一个字节,多字节字符三个字节。
    4、输入gbk,交互gbk,数据库latin1
    insert 报错:ERROR 1366 (HY000): Incorrect string value: 'xD6xD0xB9xFA' for column 'v1' at row 1
    原因是:客户端把gbk的输入当成gbk来解释,传给服务,服务把gbk转化为latin1,转化失败。
    5、输入gbk,交互gbk,数据库gbk
    insert,客户端把gbk的输入当成gbk来解释,传给服务,服务不需要转码,直接存入数据库,存入数据库正常。
    select,服务不转码,返回给客户端,客户端gbk当成gbk解释,显示正确。
    6、输入gbk,交互gbk,数据库utf8
    insert,客户端把gbk的输入当成gbk来解释,传给服务,服务把gbk转成utf8,存入数据库,存入数据库正常。
    select,服务把utf8转成gbk,返回给客户端,客户端gbk当成gbk解释,显示正确。
    7、输入gbk,交互utf8,数据库latin1
    insert 报错:ERROR 1366 (HY000): Incorrect string value: 'xD6xD0xB9xFA' for column 'v1' at row 1
    原因是:客户端把gbk的输入当成utf8来解释,解释错误。
    8、输入gbk,交互utf8,数据库gbk
    同7
    9、输入gbk,交互utf8,数据库utf8
    同7

    考虑下面的情况,输入gbk,交互gbk,数据库gbk,插入一条记录,查询回来正常。现在把交互改成utf8,会出现什么问题?
    mysql> select * from t1;
    +--------+
    | v1 |
    +--------+
    | cn中国 |
    +--------+
    1 row in set (0.00 sec)

    mysql> set names utf8;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t1;
    +----------+
    | v1 |
    +----------+
    | cn涓�浗 |
    +----------+
    1 row in set (0.00 sec)

    这是因为把utf8的中国,当成gbk解释,就是显示涓�浗,也就是说,他们对应的Id是一样的。反过来,也是一样,把gbk的涓�浗当成utf8解释,就是中国,如下:
    mysql> insert into t1(v1) values('cn涓�浗');
    Query OK, 1 row affected (0.08 sec)

    mysql> select * from t1;
    +----------+
    | v1 |
    +----------+
    | cn涓�浗 |
    | cn涓�浗 |
    +----------+
    2 rows in set (0.00 sec)

    mysql> set names gbk;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t1;
    +--------+
    | v1 |
    +--------+
    | cn中国 |
    | cn中国 |
    +--------+
    2 rows in set (0.00 sec)

  • 相关阅读:
    判断操作系统多久没有任何操作
    初识类的方法
    类引用
    将窗体显示在 PageControl 上。
    用批处理命令安装打印机
    减小Delphi2010程序的尺寸(关闭RTTI反射机制)
    Delphi 的编码与解码(或叫加密与解密)函数
    c# 让repeater多列显示
    合并动态数组
    [最新]Visual Assist X 破解版下载(10.6.1827)
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4572721.html
Copyright © 2020-2023  润新知