使用mysql数据库插入中文全部变成问号

本文详细介绍了在使用MySQL数据库插入中文时遇到乱码问题的解决方法,通过检查数据库和表的编码设置,最终成功修改列编码解决乱码问题。

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

下午使用MYSQL数据库,插入中文时候全部变成为问号,找了一下午都没有找到合适的答案,有点小伤心,一个小问题耗费这么多时间

后面按照网上的方法改来改去,最后甚至连插入中文都报错

遇到这样的问题,首先先不要着急,肯定是编码的问题,先检查下我们所使用表的编码方式,使用mysql命令:

show  create table 表名;


发现虽然表的默认方式编码是GBK,但是列的编码却是latin1,中文的编码应该为gbk或者是utf-8,所以问题出在列的编码方式的不正确选择,所以现在把列的编码方式修改一下,使用mysql命令:

 ALTER TABLE `表名` CHANGE `列名` `列名` VARCHAR(45) CHARACTER SET UTF8 NOT NULL;

修改后问题解决。


下面是修改一些关于编码方案的指令:

1.    show variables like '%char%'   查看数据库字符集


2.   SET NAMES ‘charset_name’;

   SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES 'cp1251'语句告诉服务器将来从这个客户端传 来的信息采用字符集cp1251”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符 集。)

3.   从终端登入mysql使用命令     mysql -u root -p 数据库名称 



总结一下,如果遇见插入中文乱码问题,先确定问题的产生肯定与编码方式有关,先检查数据库的编码方法,查看下数据库字符集,再查看下表的编码,最后检查下表中列的编码。检查这三个地方的编码,一般问题即可迎刃而解。



### 如何在Node.js中向MySQL数据库插入数据 要在Node.js环境中向MySQL数据库插入数据,需先确保已安装`mysql2`驱动程序[^1]。此过程涉及建立到MySQL服务器的连接并使用SQL语句执行插入操作。 #### 创建数据库连接 为了与MySQL数据库通信,在项目文件夹下创建一个新的JavaScript文件,并引入`mysql2/promise`模块以利用异步/等待功能: ```javascript const mysql = require('mysql2/promise'); async function connect() { const connection = await mysql.createConnection({ host: 'localhost', user: 'root', // 用户名 password: '', // 密码 database: 'testdb' // 使用哪个数据库 }); console.log('Connected to the MySQL server.'); return connection; } ``` 上述代码展示了如何配置和初始化一个到本地运行的MySQL实例的新连接。 #### 插入记录 一旦建立了有效的数据库链接,则可以准备要发送给MySQL的数据以及构建INSERT SQL命令。这里给出一段用于插入新用户的例子: ```javascript async function insertUser(connection, username, age) { try { let sql = "INSERT INTO users (username, age) VALUES (?, ?)"; let result = await connection.execute(sql, [username, age]); console.log(`Inserted ${result.affectedRows} row(s).`); } catch (err) { throw err; // 抛出错误以便调用者处理 } } // 假设已经有一个打开的connection对象可用 insertUser(await connect(), 'Alice', 30); ``` 这段脚本定义了一个名为`insertUser()`的方法,它接受三个参数:一个是之前获得的`connection`对象,另外两个是要存储的名字和年龄值。注意这里的问号占位符被实际变量替换掉的方式——这是防止SQL注入攻击的最佳实践之一。 对于可能出现的问题及其解决方案如下: - **无法找到表**: 确认所使用数据库名称正确无误;确认目标表格确实存在于选定的数据库内。 - **权限不足**: 检查用来登录MySQL的服务账户是否有足够的权利访问指定数据库并对特定表进行写入操作。 - **语法错误**: 双重检查SQL字符串里是否存在拼写失误或其他形式上的缺陷。 - **网络问题**: 如果不是在同一台机器上部署应用和服务端口的话,请验证防火墙设置允许外部请求到达MySQL服务监听的位置。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值