跳到主要内容
常见问题 SQL Server乱码字符集

中文数据出现乱码怎么处理

中文入库/查询出乱码的原因:数据类型 varchar 与 nvarchar 混用、排序规则与客户端编码不匹配,以及定位与修复路径。

发布于 2026/11/11 所属频道 SQL Server

简短答案

中文乱码多是数据类型层问题:varchar(非 Unicode)存中文受排序规则与代码页限制,跨类型转换(varchar ↔ nvarchar)时编码对不上就乱。查清「存的时候还是取的时候」乱的,再定位类型链路。

排查步骤

  1. 查列的数据类型:
SELECT name, type, collation_name
FROM sys.columns WHERE object_id = OBJECT_ID(N'表名');
  1. 判断乱码发生阶段:
    • 入库就乱:应用端编码问题或目标列是 varchar,建议改 nvarchar;
    • 入库正常、取出乱:排序规则/客户端显示层问题。
  2. 混用类型时显式转换,避免隐式转换吃掉信息:CAST(列 AS NVARCHAR(100))。
  3. 列改 nvarchar:
ALTER TABLE 表名 ALTER COLUMN 列名 NVARCHAR(100) NULL;
  1. 在 SSMS 结果里仍显示乱码时,核对 SQL Server 2022 Developer 条目页说明的排序规则支持,跨实例取数时两侧排序规则要一致。
  2. 老库兼容行为以 SQL Server 2019 Developer 条目页核对。

现象对照表

现象 指向
存进去就乱 应用编码或列类型
取出才乱 排序规则/显示层
个别字乱、多数正常 varchar 截断或非 BMP 字符

操作小结

  1. 统一用 nvarchar 存中文,是绝大多数场景的正确选择。
  2. 改列前备份,ALTER COLUMN 不可回退。
  3. 跨实例交换数据时对齐排序规则。

相关链接

本文内容基于公开资料整理,仅供参考;涉及授权与合规的操作请以厂商官方文档为准。

相关推荐下载

按本文主题匹配的官方原版镜像条目

配套 PE 工具

制作启动盘、备份数据、修复引导

其他常见问题

同一集合内的相近主题,按标签与关键词匹配