DOS命令窗口实用DDL语句插入中文数据乱码问题
问题1: 在使用DML语句在DOS命令窗口插入中文语句时 , DOS命令窗口报错。
从图中可以看到,表格结构没有问题
- 使用语句: insert into student values(1,’aaa’,999.99); 的时候是可以插入成功的。
- 使用语句: 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’就是名字是中文乱码的产物
分析:
- DOS命令窗口默认是gbk码表,而且DOS命令窗口的码表是不可以修改的!
- 由于是乱码问题,并且DOS命令窗口的码表我们已经知道,所以我们需要查看当前数据库服务器使用的码表相关的变量
- 查询语句为:show variables like ‘%character%’(‘%char%’)
由上图可知,服务器认为客户端(即DOS命令窗口)使用的是utf8码表,以致于乱码
解决 :
方法一:
- 设置character_set_client 临时环境变量为gbk。 可以通过set命令设置。 (set命令是设置临时环境变量的命令,临时环境变量就是指仅仅对当前窗口起作用)
- 修改结果集使用的码表语句为: set character_set_client =gbk;
备注: 以上的方法是属于临时环境变量,只要控制台一旦关闭,马上失效了。
方法二:
一劳永逸的方法:修改my.ini文件的default_character_set gbk;
问题2:使用DQL查询语句,查看是否添加成功时,发现查询结果不是添加的研究僧。
显然上面显示的并不是我们所期望的研究僧!
分析:
由问题1的分析中我们可以看到:
character_set_results | utf8 服务器对查询结果数据默认使用的码表。
所以导致查询结果也出现了乱码!
解决 :
同理:我们再通过set character_set_results =gbk;3. 修改结果集使用的码表。
即可得到如下结果: