我刚刚开始使用node.js和node-mysql,我遇到了以下问题:我从客户端发送数据(Angular.js)。服务器(node.js)正在将其发送到mysql数据库。Server.js (部分):
var express = require('express');
var app = express();
mysql = require('node-mysql2');
var connection = mysql.createConnection(someSettings);
...skipped part...
app.put('/api/announcements', function(req, res) {
connection.execute('INSERT INTO announcements(title, text) VALUES(?, ?)', [req.body.title, req.body.text]);
res.send({status: true});
});问题是,如果我在请求字段title和text中发送拉丁字母,这是可以的。但如果我尝试发送西里尔文的,会出现以下问题:
app.put('/api/announcements', function(req, res) {
console.log(req.body.title, req.body.text); // <- shows the whole strings
...但是在表中只有字符串的一部分!(我的意思是,新记录的字段title和text只包含字符串的一部分。
用于解释的截图:



UPD:这里有一个例子,你可以自己试一试。该归档文件由科尔多瓦项目的表导出文件(announcements.sql)和www文件夹组成。你还需要插件: express,mysql2,promise,nodejs-websocket。我的想法是启动两个服务器:在88端口上处理REST请求,在89端口上向所有连接的客户机广播更改。尝试以下测试:在浏览器中打开一个索引页,并尝试添加以下字符串: 1.有一个地方人行道的尽头2.Естьместо,гдезаканчиваетсятротуар;sqlfiddle.com/#!2/96085/1db.tt/GfvjmXtU
发布于 2014-01-12 19:05:56
我发现这个错误只有在我使用connection.execute()时才会出现。connection.query()工作得很好。我还没有找出这种行为的原因,但区别是:
如果我使用
connection.query('INSERT INTO announcements VALUES("Расти борода, расти")');Query.toPacket (/node_modules/mysql2/lib/packets/query.js)返回
{
sequenceId: 0,
buffer: <Buffer 04 00 00 00 03 49 ...>,
offset: 83,
start: 0,
end: 83
}和
connection.execute('INSERT INTO announcements VALUES("Расти борода, расти")');Execute.toPacket (/node_modules/mysql2/lib/packets/execute.js)返回
{
sequenceId: 0,
buffer: <Buffer 88 07 5d 01 17 02 ...>,
offset: 38,
start: 0,
end: 54
}https://stackoverflow.com/questions/20785880
复制相似问题