MSSQL存储中英阿多语言数据时如何用N前缀解决拼接SQL乱码问题
MSSQL多语言存储N前缀拼接实现方案
问题背景
需要在MSSQL表中存储、展示包含英文、中文、阿拉伯语在内的多语言内容,当前部署在Windows Server上的MSSQL服务存在异常:中文、阿拉伯语等非英文字符存入数据库后全部显示为问号。
已确认基础配置:
- 存储字段类型为
nvarchar - 数据库字符集为UTF-8
具体实现方案
现有字符串拼接逻辑只需要在包裹传入值的单引号前增加N前缀即可,和参考示例中insert into @table select N'你好'的语法逻辑完全一致:N前缀的作用是显式告知SQL Server后续传入的字符串为Unicode格式,避免引擎按非Unicode编码解析时将不支持的字符替换为问号。
修改前的插入代码
SQL = "Insert Into Table ( [Title] ) Values ( '" & strTitle & "' )" dbConnection.Execute(SQL)
修改后的插入代码
SQL = "Insert Into Table ( [Title] ) Values ( N'" & strTitle & "' )" dbConnection.Execute(SQL)
注意事项
- 修改完成后重新执行插入逻辑,直接查询表内容即可验证非英文字符是否正常存储
- 需确保代码中
strTitle变量本身存储的是未被转码的原始多语言内容,不存在代码层提前将特殊字符替换为问号的逻辑
本次方案仅针对SQL拼接场景下的N前缀使用问题,参数化查询相关内容不在本次讨论范围内。
内容的提问来源于stack exchange,提问作者user16674741
相关产品推荐
相关产品推荐

