Я нашел, в чем была проблема.
Дело в задержке. Проблема была в том, что мой ввод был быстрее, чем 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
является китайским.
Мой набор символов по умолчанию для БД и таблицы, конечно, 'utf8_general_ci'. Я тоже использовал util.format
или utf8.encode
, но получил ту же ошибку.
Я следовал Emoji не вставляются в базу данных node js mysql
И мне удалось ввести «Данные» в мою таблицу, но сообщение об ошибке все еще появляется.
Я попытался снова с «Массивом», что я и хотел, но это не удалось.
Я нашел show variables like 'c%';
в Google и набрал 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
- латинский.
это критично для меня? а то как это изменить?