MSSQL编码问题:NVARCHAR列插入中文字符显示为??的解决方法
解决MSSQL中NVARCHAR列插入中文字符显示为??的问题
问题场景
我之前碰到过完全一样的情况:尝试在MSSQL中执行这条插入语句时,出现了中文乱码的问题:
insert into STUDENT (STUDENT_NAME, STUDENT_MARKS, SID) values ('索引', 10, 2)
其中STUDENT_NAME列的类型明明是NVARCHAR,但插入后学生姓名却显示成了??。
原因分析
这是MSSQL的编码规则导致的:
- 当你用普通单引号包裹字符串(
'索引')时,MSSQL会默认按非Unicode编码(比如常见的SQL_Latin1_General_CP1_CI_AS)解析,这类编码不支持中文字符的存储,自然就会出现乱码或??的情况。 - 而
NVARCHAR是专门为存储Unicode字符设计的列类型,必须配合Unicode字符串的标识才能正常工作。
解决方案
只需要在字符串常量前加上大写的N前缀,告诉MSSQL这是一个Unicode字符串,修改后的语句就能正常插入中文字符了:
insert into STUDENT (STUDENT_NAME, STUDENT_MARKS, SID) values (N'索引', 10, 2)
另外补充一点:如果是通过变量插入数据,也要确保变量的类型是NVARCHAR而非VARCHAR,这样才能从源头避免编码问题。
内容的提问来源于stack exchange,提问作者Jatinder Jindal
相关产品推荐
相关产品推荐

