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

本文介绍在DOS命令窗口使用DML语句插入中文数据时遇到的乱码问题及解决方法,包括如何设置字符集来避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

<think>我们正在解决MySQL执行建表语句DDL中文显示为乱码问题。根据引用,中文乱码通常与字符集设置有关。以下步骤将帮助解决此问题: 1. **检查数据库默认字符集**:确保MySQL服务器和数据库的默认字符集为UTF-8。可以通过以下SQL语句查看: ```sql SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'character_set_database'; ``` 如果这些变量不是`utf8`或`utf8mb4`,则需要修改。 2. **修改MySQL配置文件(my.ini或my.cnf)**:根据引用[3]和[4],在配置文件中设置默认字符集: - 在`[mysqld]`部分添加: ``` character-set-server=utf8 collation-server=utf8_general_ci ``` - 在`[client]`和`[mysql]`部分添加: ``` default-character-set=utf8 ``` 3. **重启MySQL服务**:修改配置文件后,重启MySQL服务使设置生效。 4. **在建表语句中显式指定字符集**:即使默认字符集已设置,建表时显式指定字符集也是一个好习惯。例如: ```sql CREATE TABLE 表名 ( 列名 数据类型 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 注意引用[2]中强调了建表时指定字符集的重要性。 5. **检查连接字符集**:在应用程序连接数据库时,确保连接字符串指定了正确的字符集。例如,在JDBC连接字符串中添加参数: ``` jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8 ``` 引用[1]和[4]提到了客户端连接字符集设置的重要性。 6. **验证表结构**:修改后,执行`SHOW CREATE TABLE 表名`,查看DDL中的中文是否正常显示。 如果以上步骤仍不能解决问题,可能需要检查操作系统的区域语言设置,以及用于执行SQL语句的工具(如命令行客户端、Navicat等)的字符集设置。 §§相关问题§§ 1. 如何查看MySQL当前使用的字符集配置? 2. 除了修改全局配置,还有什么方法可以确保单个表的字符集为UTF-8? 3. 为什么在MySQL中有时需要设置`character_set_client`、`character_set_connection`和`character_set_results`? 4. 如何解决从命令行查看MySQL数据时出现中文乱码问题?</think>### MySQL建表语句DDL中文乱码解决方法 当MySQL执行建表语句后,DDL中的中文显示为乱码,通常是由字符集配置问题导致的。以下是系统性的解决方案: #### 1. **修改MySQL配置文件(永久生效)** - 找到MySQL配置文件 `my.ini` (Windows) 或 `my.cnf` (Linux) - 在 `[mysqld]` 和 `[client]` 部分添加字符集配置: ```ini [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 ``` - **重启MySQL服务**使配置生效[^3][^4]。 #### 2. **建表时显式指定字符集** 在DDL语句中强制声明字符集: ```sql CREATE TABLE 用户表 ( id INT PRIMARY KEY, 姓名 VARCHAR(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 关键设置 ``` 注意:`DEFAULT CHARSET=utf8` 必须包含在建表语句中[^2]。 #### 3. **检查连接字符集设置** 在应用程序连接数据库时(如JDBC),需指定字符集: ```java // JDBC连接示例 String url = "jdbc:mysql://localhost/db?useUnicode=true&characterEncoding=UTF-8"; ``` 确保参数 `characterEncoding=UTF-8` 被正确设置[^1][^4]。 #### 4. **验证字符集状态** 执行以下SQL检查当前字符集配置: ```sql SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; ``` 正常输出应包含: ``` character_set_client | utf8 character_set_connection | utf8 character_set_database | utf8 character_set_server | utf8 ``` #### 5. **转换已有乱码数据(补救措施)** 若已有表出现乱码,可尝试转换: ```sql ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8; ``` > **关键点总结**:配置文件修改 + 建表显式声明字符集 + 连接参数指定编码,三者缺一不可[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值