mysql - 如何从 Node.js 将汉字插入 MySQL 数据库?
问题描述
我发现了问题所在。
关键是延迟。我的输入比 mysql 服务器接受的数据快是一个问题。
所以我想结束这个问题并创建一个关于如何在sql foreach
.
我觉得很奇怪。
首先,我在 MySQL CLI 中输入以下查询:
INSERT INTO table1 VALUES (null, 女神在, now(), 0, 0);
它工作正常。数据按预期插入。
然后,我从 Node.js MySQL 脚本输入相同的查询。
app.get('/db', (req, res) => {
let var1 = 'english word'
let sql = 'INSERT INTO filelist VALUES (null, ?, ?, ?, ?)';
let addeddate = 'now()';
let isdeleted = '0';
let ismodified = '0';
let params = [var1, addeddate, isdeleted, ismodified];
connection.query(sql, params,
(err, rows, fields) => {
if(err) {
console.log(err);
} else {
res.send(rows);
console.log(rows);
}
}
)
res.render('view');
})
它也可以正常工作,但是如果我将 的值更改var1
为中文字母,则会出现以下错误:
C:\Users\myapp\node_modules\mysql\lib\protocol\Parser.js:437
throw err; // Rethrow non-MySQL errors
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:526:11)
at ServerResponse.header (C:\Users\myapp\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Users\myapp\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\myapp\node_modules\express\lib\response.js:267:15)
at ServerResponse.send (C:\Users\myapp\node_modules\express\lib\response.js:158:21)
at Query.<anonymous> (C:\Users\myapp\app_file.js:166:21)
at Query.<anonymous> (C:\Users\myapp\node_modules\mysql\lib\Connection.js:526:10)
at Query._callback (C:\Users\myapp\node_modules\mysql\lib\Connection.js:488:16)
at Query.Sequence.end (C:\Users\myapp\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
at Query._handleFinalResultPacket (C:\Users\myapp\node_modules\mysql\lib\protocol\sequences\Query.js:149:8) {
code: 'ERR_HTTP_HEADERS_SENT'
}
Program node app_file.js exited with code 1
res.render
在浏览器上完全没问题。即使var1
是中国人。
我默认的 db 和 table 字符集当然是 'utf8_general_ci'。我用过util.format
or utf8.encode
too,但我得到了同样的错误。
而且我成功地将“A数据”输入到我的表中,但仍然出现错误消息。
我再次尝试了我最初想要的“阵列”,但它失败了。
我show variables like 'c%';
在谷歌上找到并输入了 mysql cli。
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results
character_set_server latin1
character_set_system utf8
character_sets_dir /rdsdbbin/mysql-5.7.22.R5/share/charsets/
check_proxy_users OFF
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server latin1_swedish_ci
completion_type NO_CHAIN
似乎几乎每个部分都是 utf8 但server
都是拉丁文。
对我来说很重要吗?然后如何改变这个?
解决方案
通过您的问题和您当前的调试方式,可以肯定地说问题出在应用程序中,而不是数据库中,因为您可以手动插入中文字母。
话虽如此,虽然您的数据库环境是 utf-8,但您的应用程序可能不是。在处理 OOP 和准备好的语句时,我们通常charset
为我们的连接定义一个,以便我们确保我们的查询等格式正确。
例子:
var connection = mysql.createConnection({
host : 'your_ip',
user : 'user',
password : 'password',
database : 'db',
charset : 'utf8mb4'
});
确保在此实施后重新启动您的节点服务器。
推荐阅读
- f# - 无法在 F# 中编译计算表达式中的代码
- flutter - 未为“专辑”类型定义运算符“[]”
- html - 如何为以编程方式生成的 React 组件设置默认值?
- python - 制作关卡系统,错误:对象不可下标
- javascript - 在后退按钮单击 (REACTJS) 上执行代码
- javascript - 这是在调用函数之前等待 API 调用完成的正确方法
- wpf - 从 ViewModel 绑定 ValidationRule
- python - 当我从电影数据字典中创建字典时,如何停止生成嵌套元组?
- c++ - 使用 C++ 从 txt 文件中读取数字
- javascript - 使用网站功能时自动放大 IOS