通过node.js将汉字插入MySQL

问题描述

我现在使用带有 MysqL 驱动程序的 Node.js 连接到旧的 MysqL 数据库(版本: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驱动程序都会以utf-8格式向MysqL发送查询

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

我也尝试使用第三方库(iconv-lite、encoding)在插入前将单词改为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;