1

我现在正在使用带有 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,编码)在插入之前将单词更改为 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 
4

1 回答 1

0
于 2021-05-06T06:43:23.757 回答