SQL Server 2016执行俄文查询输出全为问号,如何正确显示原字符串?
解决SQL Server 2016中俄文显示为问号的问题
这个问题我碰到过好多次了,本质是Unicode字符的处理方式不对导致的。SQL Server里,非Unicode类型(比如varchar/char)无法正确存储俄文这类超出ASCII范围的字符,所以会显示成问号。按下面的步骤来就能解决:
给字符串加N前缀:
你的查询语句里,字符串前面必须加上N前缀,告诉SQL Server这是一个Unicode字符串(对应nvarchar类型)。修改后的语句应该是:select N('все магазины Сильпо') as test不加
N的话,SQL Server会把字符串转换成默认的非Unicode编码,俄文字符就会丢失变成?。确保存储列的类型正确:
如果是从表中查询数据,那存储这些俄文的列必须定义为nvarchar或nchar类型,而不是varchar/char。如果列类型不对,就算查询时加了N前缀,存储的时候已经丢失了字符,还是会显示问号。检查查询工具的字体设置:
最后确认一下你的查询工具(比如SSMS)用的字体支持俄文。打开SSMS的「工具」->「选项」->「环境」->「字体和颜色」,选择一个支持Unicode的字体(比如Consolas、Lucida Console都是没问题的),避免因为字体不支持导致显示异常。
内容的提问来源于stack exchange,提问作者Daxesh Radadiya




