我现在正在使用带有 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