javascript - 从 javascript 到 mssql 的瑞典字符 - 在数据库表中显示

所以我现在遇到了 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.');
      }
})

*数据库表中将检索包含“åäö”的值的列定义为数据类型 nvarchar(50)

  • 我还尝试在变量 q 中使用 N'ö',这些字符(在双引号内)出现在数据库表“ᅢᄊ”中

*console.log('ö') 按预期在控制台中打印 ö

*我已经尝试了在 js 中我能想到的所有转换(例如 utf-8、latin1 等...)

*数据库中的排序规则是 Finnish_Swedish_CI_AS

*我试图从另一个表中读出瑞典语 chrs,它通过包 msnodesqlv8 工作正常

对我来说,问题似乎出在从 js(这里一切看起来都很好)通过包 msnodesqlv8 发送查询以及 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]', (err,) => {
        console.log('Creating...')
        conn.query('create table [dbo].[Swedish] (testCol nvarchar(50))', (err) => {
            console.log('Inserting...')
            conn.prepare('insert [dbo].[Swedish] (testCol) values (?)', (err, ps) => {
                ps.preparedQuery(['ö'], (err) => {
                    ps.free();
                    console.log('Selecting...')
                    conn.query('select * from [dbo].[Swedish]', (err, rows) => {
                        console.log(`${JSON.stringify(rows)}`)
                    })
                })
            })
        })
    })
})

哪个产量...

> node .\swedish.js        
Connecting...
Dropping...
Creating...
Inserting...
Selecting...
[{"testCol":"ö"}]

通过 SSMS 查询时出现相同的字符。

关于javascript - 从 javascript 到 mssql 的瑞典字符 - 在数据库表中显示为问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63613885/

相关文章:

javascript - 如果导航到 React Native 中的其他屏幕,如何保留 formik

java - 致命异常 : java. lang.IllegalArgumentException

mongodb - Azure cosmosDB : Getting error on sortin

php - 如何使用 line bot webhook 请求在线路组中使用 @mention/@ta

ios - 使用 ShareExtension 分发 Flutter 应用程序时缺少 CFBundl

apache-flink - Apache Flink JobListener 无法正常工作

markdown - 如何在 Sublime Text 3 中为 Markdown 启用 Emmet

html - CSS Grid - 在自动流列上自动生成新的行中断

javascript - Greasemonkey 用户脚本被内容安全策略阻止

python-attrs - attrs转换器的装饰器