簡體   English   中英

如何從 Node.js 向 MySQL 數據庫中插入漢字?

[英]How to insert Chinese characters into a MySQL database from Node.js?

我發現了問題所在。

關鍵是延遲。 問題是我的輸入比 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.formatutf8.encode ,但我遇到了同樣的錯誤。


我跟着表情符號沒有插入數據庫節點js mysql

我成功地將“A 數據”輸入到我的表中,但錯誤消息仍然出現。

我再次嘗試使用 'Array',這是我最初想要的,但它失敗了。


我發現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'
});

確保在此實施后重新啟動您的 Node 服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM