问题描述
所以我现在对Node js遇到这个奇怪的问题,找不到任何解决方案...
我正在尝试将值插入到我的mssql表中,其中一些值包括瑞典字符“åäö”。无论如何,当我这样做时,它们显示为“ ??????”。每个特殊字符都显示为两个问号(“ö”->“ ??”)。
一些细节:
*我正在使用的软件包在js中:msnodesqlv8
var sql = require('msnodesqlv8');
const connectionString = "server=host;Database=MyDb;Trusted_Connection=Yes;Driver={sql Server Native Client 11.0}"
q = "Insert into [MyDb].[dbo].[MyTable] (testCol) values ('ö')"
sql.query(connectionString,q,(err,data) => {
if (err) {
console.log(err);
}
else {
console.log('Imported row to table.');
}
})
* db表中将检索包含“åäö”的值的列定义为数据类型nvarchar(50)
- 我也尝试使用变量q中的N'ö'和这些字符(在双引号中)出现在数据库表“ ᅢ ᄊ”中
* console.log('ö')在控制台中按预期方式打印ö
*我已经尝试了所有可以在js中考虑的转换(例如utf-8,latin1等)
*数据库中的排序规则为 Finnish_Swedish_CI_AS
*我尝试从另一张表中读取瑞典chrs,并且通过包msnodesqlv8可以正常工作
对我来说,问题似乎出在通过js通过包msnodesqlv8通过js发送查询时(一切看起来都很好),并且当mssql应该解释值时。我很高兴有人可以帮助我。
解决方法
您是否由于某种原因没有使用准备好的陈述?它会为您处理编码,例如:
const sql = require('msnodesqlv8')
const connectionString = "server=YourServerIp,YourServerPort;Database=StackOverflow;Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0};"
console.log('Connecting...')
sql.open(connectionString,(err,conn) => {
console.log('Dropping...')
conn.query('drop table if exists [dbo].[Swedish]',) => {
console.log('Creating...')
conn.query('create table [dbo].[Swedish] (testCol nvarchar(50))',(err) => {
console.log('Inserting...')
conn.prepare('insert [dbo].[Swedish] (testCol) values (?)',ps) => {
ps.preparedQuery(['ö'],(err) => {
ps.free();
console.log('Selecting...')
conn.query('select * from [dbo].[Swedish]',rows) => {
console.log(`${JSON.stringify(rows)}`)
})
})
})
})
})
})
哪个产量...
> node .\swedish.js
Connecting...
Dropping...
Creating...
Inserting...
Selecting...
[{"testCol":"ö"}]
通过SSMS查询时出现相同的字符。