解决 SQL Server 表中的中文乱码问题

  • A+
所属分类:SQL Server

背景信息

用户在查询 SQL Server 表中的生僻字时,查询结果出现乱码。本文将介绍该问题的原因以及解决方法。

问题复现示例

执行如下代码,查询 SQL Server 表中的生僻字“䅇 (su)”。

  1. use tempdb
  2. go
  3. IF OBJECT_ID('#temp', 'U') IS NOT NULL
  4. DROP TABLE #temp
  5. GO
  6. create table #temp(
  7. firstName varchar(10)
  8. )
  9. insert into #temp
  10. select '䅇'
  11. union all
  12. select '库'
  13. ;
  14. select * from #temp

显示结果如下,“䅇 (su)”字并未正确显示,而是出现了问号“?”。

解决 SQL Server 表中的中文乱码问题

原因分析

SQL Server 使用 Unicode 编码格式的数据类型(例如 NCHAR、NVARCHAR)来支持包含中文在内的亚洲语言。在查询代码中,数据类型必须是 Unicode 编码的数据类型。但在上述示例代码中使用的数据类型是 VARCHAR,所以导致查询结果出现乱码。

解决方法

要解决在 SQL Server 的表中查询生僻字出现乱码的问题,只需要将上述示例代码中的数据类型改为 Unicode 编码格式的数据类型即可(下述示例中使用的是 NVARCHAR)。

另外,为避免乱码问题,在向 Unicode 编码格式的数据类型插入数据时,需要使用前置词 N。前置词 N 代表的是 SQL-92 标淮中的国家语言,且 N 必须大写。若您没有在 Unicode 字符串的常数前加 N 做为前置词,则 SQL Server 会在使用字符串之前将其转换成目前资料库的非 Unicode 字码页。

操作步骤

将上述示例中的数据类型 VARCHAR 改为 NVARCHAR,执行如下代码,查询 SQL Server 表中的生僻字“䅇 (su)”。

  1. use tempdb
  2. go
  3. IF OBJECT_ID('#temp', 'U') IS NOT NULL
  4. DROP TABLE #temp
  5. GO
  6. create table #temp(
  7. firstName nvarchar(10)
  8. )
  9. insert into #temp
  10. select N'䅇'
  11. union all
  12. select N'库'
  13. ;
  14. select * from #temp

显示结果如下,“䅇 (su)”字正确显示出来了。

解决 SQL Server 表中的中文乱码问题

阿里服务及其他云产品长期优惠活动收集整理如下:

admin
阿里邮箱 企业邮箱标准版 5账号
阿里云云服务器ECS-全民云计算/通用版/入门级/个人建站
网站定制/网站建设一条龙/不满意全额退款/云·企业官网
阿里云短信服务个人企业验证码系统&营销短信企业营销通用套餐

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: