繁体   English   中英

将汉字插入MySQL到node.js

[英]Insert Chinese character into MySQL through node.js

我现在使用 Node.js 和 mysql 驱动程序连接到旧的 MySQL db(版本:4.0.18-nt)。 数据库默认排序规则是 latin1。

mysql 字符设置:

character set   latin1  latin1
character sets  latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5   latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

当我在数据库中插入汉字时,它会变成乱码。

var mysql = require('mysql');
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'user',
    password: 'pwd',
    database: 'user',
    charset: 'BIG5' // I have tried 'utf8'/'latin1'/'BIG5' 
});

connection.query(`update user set chi_surname = '陳', chi_other_name = '陳大文' where user_id = '1'`
    , async function (error, results, fields) {
        if (error) throw error;
        console.log('The solution is: ', results);
        console.log(fields)
    });

结果为 mysql

chi_surname   chi_other_name
�䒰          �䒰憭扳��

I tried to convert above text (�䒰�䒰憭扳��) to utf-8, then it show 陳大文. 

如果我直接更新 phyMyAdmin 中的字段,它可以正确更新。

chi_surname   chi_other_name
陳            大文

似乎 mysql 驱动程序将向 Mysql 中的 Mysql 发送查询,无论我在连接配置中放置什么字符集。

我知道将数据库的默认排序规则更改为 utf-8 可以解决问题,但由于也有许多旧程序调用数据库,因此无法选择更改数据库排序规则。

我还尝试使用第三方库(iconv-lite,编码)在插入之前将单词更改为 BIG5/latin1,但仍然失败。

有什么方法可以在这个数据库中插入汉字吗? 谢谢你。

Node version:node v15.6.0
node-mysql version: 2.18.1

(来自评论)

CREATE TABLE department (
    'dept_id' varchar(10) NOT NULL default '', 
    'dept_code' varchar(10) default NULL, 
    'chi_name' varchar(50) default NULL, 
    'eng_name' varchar(50) NOT NULL default ''
) TYPE=MyISAM 

A4FBA6C0C657牛池灣的Big5编码。 所以你需要CHARACTER SET big5

连接、列定义等。

请提供SHOW VARIABLES LIKE 'char%'; SHOW CREATE TABLE

你似乎已经有了这个:

var connection = mysql.createConnection({ ... , charset : 'big5'});

所以可能在其他地方。

可以让列使用与连接不同的字符集; 应正确处理转换。

请检查 MySQL 版本

SELECT @@version;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM