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. 修改结果集使用的码表。
即可得到如下结果:
这里写图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个示例的 MySQL 数据表,以及相应的 DDL 语句插入语句插入大量数据语句,供您进行慢查询测试: DDL语句: ```sql CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(255) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY username (username), UNIQUE KEY email (email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 插入语句: ```sql INSERT INTO users (username, password, email) VALUES ('user1', 'password1', 'user1@example.com'), ('user2', 'password2', 'user2@example.com'), ('user3', 'password3', 'user3@example.com'), ('user4', 'password4', 'user4@example.com'), ('user5', 'password5', 'user5@example.com'); ``` 插入大量数据语句: ```sql INSERT INTO users (username, password, email) SELECT CONCAT('user', n), MD5(CONCAT('password', n)), CONCAT('user', n, '@example.com') FROM ( SELECT n FROM ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS digits CROSS JOIN ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS tens CROSS JOIN ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS hundreds LIMIT 10000 ) AS numbers; ``` 以上语句将会创建一个名为 `users` 的数据表,并向其中插入 5 条记录,以及插入 10000 条随机生成的记录。请注意,插入大量数据语句可能需要一些时间来完成。 希望这些语句能够帮助您进行慢查询测试!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值