从javascript到mssql的瑞典字符-在db表中显示为问号?
所以我现在有一个关于node js的奇怪问题,并且找不到任何解决方案 我正在尝试向我的mssql表中插入值,其中一些值包含瑞典语字符“åäö”。不管怎么说,当我这样做时,它们看起来像是“???????”。每个特殊字符显示为两个问号(“ö”->“??”) 一些细节: *我使用的包在js:msnodesqlv8中从javascript到mssql的瑞典字符-在db表中显示为问号?,javascript,sql-server,special-characters,Javascript,Sql Server,Special Characters,所以我现在有一个关于node js的奇怪问题,并且找不到任何解决方案 我正在尝试向我的mssql表中插入值,其中一些值包含瑞典语字符“åäö”。不管怎么说,当我这样做时,它们看起来像是“???????”。每个特殊字符显示为两个问号(“ö”->“??”) 一些细节: *我使用的包在js:msnodesqlv8中 var sql = require('msnodesqlv8'); const connectionString = "server=host;Database=MyDb;Tru
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ö的trid,这些字符(在双引号中)出现在db table中“ᅢᄊ"李>
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.');
}
})
对我来说,问题似乎出在从js(这里一切看起来都很好)通过包msnodesqlv8发送查询时,以及mssql将解释这些值时。如果有人能帮助我,我非常高兴。你为什么不使用预先准备好的语句?它会为你处理编码,例如:
const sql=require('msnodesqlv8')
const connectionString=“server=YourServerIp,YourServerPort;数据库=堆栈溢出;可信连接=是;驱动程序={SQL Server本机客户端11.0};"
console.log('正在连接…')
sql.open(connectionString,(err,conn)=>{
console.log('droping…'))
conn.query('drop table if exists[dbo].[Swedish]',(err,)=>{
console.log('Creating…'))
conn.query('create table[dbo].[Swedish](testCol nvarchar(50)),(err)=>{
console.log('插入…')
连接准备('插入[dbo].[Swedish](测试列)值(?),(err,ps)=>{
ps.preparedQuery(['ö'],(err)=>{
ps.free();
console.log('正在选择…')
conn.query('select*from[dbo].[Swedish]',(err,rows)=>{
log(`${JSON.stringify(rows)}`)
})
})
})
})
})
})
这就产生了
>节点。\swedish.js
连接。。。
滴水。。。
创建。。。
插入。。。
选择。。。
[{“testCol”:“ö”}]
通过SSMS查询时,会出现相同的字符。显示您在此处使用的实际代码。
'因此,您可能正在使用不同的排序规则,或者在数据进入数据库之前发生了一些事情。我们需要一个here.Hi larnu。我编辑了我的帖子。感谢您的回答!:d考虑到您只使用了一个文本值,那么这就安全地建议表dbo.MyTable中的列testCol
e> 没有使用您认为的排序规则。您需要更改列testCol
的排序规则,或者将其更改为nvarchar
并使用nvarchar
文字。我已经使用nvarchar
作为列testCol
的定义数据类型…如果它被定义为nvarchar
,那么ss annvarchar
。