DOS命令窗口实用DDL语句插入中文数据乱码问题

问题1: 在使用DML语句在DOS命令窗口插入中文语句时 , DOS命令窗口报错。


这里写图片描述

从图中可以看到,表格结构没有问题

  1. 使用语句: insert into student values(1,’aaa’,999.99); 的时候是可以插入成功的。
  2. 使用语句: insert into student values(1,’研究僧’,111.11); 语句时,DOS窗口报错ERROR 1366 (HY000): Incorrect string value: ‘\xD1\xD0\xBE\xBF\xC9\xAE’ for columERROR 1366 (HY000): Incorrect string value: ‘\xD1\xD0\xBE\xBF\xC9\xAE’ for colum

‘\xD1\xD0\xBE\xBF\xC9\xAE’就是名字是中文乱码的产物


分析:

  1. DOS命令窗口默认是gbk码表,而且DOS命令窗口的码表是不可以修改的!
  2. 由于是乱码问题,并且DOS命令窗口的码表我们已经知道,所以我们需要查看当前数据库服务器使用的码表相关的变量
  3. 查询语句为:show variables like ‘%character%’(‘%char%’)
    这里写图片描述
    由上图可知,服务器认为客户端(即DOS命令窗口)使用的是utf8码表,以致于乱码

解决 :

方法一:

  1. 设置character_set_client 临时环境变量为gbk。 可以通过set命令设置。 (set命令是设置临时环境变量的命令,临时环境变量就是指仅仅对当前窗口起作用)
  2. 修改结果集使用的码表语句为: set character_set_client =gbk;

备注: 以上的方法是属于临时环境变量,只要控制台一旦关闭,马上失效了。

方法二:
一劳永逸的方法:修改my.ini文件的default_character_set gbk;

问题2:使用DQL查询语句,查看是否添加成功时,发现查询结果不是添加的研究僧。

这里写图片描述
显然上面显示的并不是我们所期望的研究僧!

分析:

由问题1的分析中我们可以看到:
character_set_results | utf8 服务器对查询结果数据默认使用的码表。
所以导致查询结果也出现了乱码!

解决 :

同理:我们再通过set character_set_results =gbk;3. 修改结果集使用的码表。
即可得到如下结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42691149/article/details/82357127