SQL Server中文乱码需修改排序规则为Chinese_PRC_CI_AS:先查数据库排序规则,若为Latin类则需用ALTER DATABASE切换,并强制单用户模式;再逐列用ALTER TABLE修正已有字段;插入查询中文须加N前缀。
sql server数据库中文显示为方块、问号或拉丁字母乱码,说明当前排序规则不支持中文语义解析,必须修改数据库级或列级排序规则才能让中文正确存储、查询和排序,而不是靠重启工具或重装客户端蒙混过关。
检查当前数据库排序规则
打开 SQL Server Management Studio → 连接目标服务器 → 在【对象资源管理器】中右键点击对应数据库 → 选择「属性」→ 左侧点击「常规」→ 查看右侧「排序规则」字段值。
若显示为 【SQL_Latin1_General_CP1_CI_AS】 或类似含 Latin、CP1 的名称,即为问题根源——它根本不识别中文字符权重,仅按字节序处理,必然导致中文乱码或排序错乱。
修改数据库默认排序规则(适用于新表/新列)
⚠️ 注意:此操作仅影响后续新建的表和列,已有表的字段排序规则不会改变。
在「数据库属性」窗口中 → 左侧切换到「选项」页 → 在「排序规则」下拉框中选择 【Chinese_PRC_CI_AS】 → 点击「确定」。
若点击确定时弹出错误:“The database could not be exclusively locked to perform the operation”,说明有其他连接正在使用该数据库。此时需先执行以下三步强制切换:
① 打开新查询窗口,执行:
ALTER DATABASE [你的数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
② 再执行排序规则修改语句:
ALTER DATABASE [你的数据库名] COLLATE Chinese_PRC_CI_AS
③ 最后恢复多用户模式:
ALTER DATABASE [你的数据库名] SET MULTI_USER
修正已有字段的排序规则(关键步骤)
方法一:用 ALTER TABLE 逐列修正(推荐,精准可控)
执行:
ALTER TABLE 表名 ALTER COLUMN 字段名 NVARCHAR(长度) COLLATE Chinese_PRC_CI_AS
例如原字段是 name VARCHAR(50),应先确保类型为 Unicode:
ALTER TABLE users ALTER COLUMN name NVARCHAR(50) COLLATE Chinese_PRC_CI_AS
方法二:重建表结构(适合批量修正)
导出表结构 → 将所有 VARCHAR/CHAR 改为 NVARCHAR/NCHAR → 在每列定义末尾添加 COLLATE Chinese_PRC_CI_AS → 删除原表 → 执行新建语句 → 再导入数据。
【必须同步修改所有参与 JOIN、WHERE、ORDER BY 的字段】,否则关联查询仍会报“无法解决排序规则冲突”。
插入与查询时避免隐式转换失效
插入中文必须加 N 前缀:
INSERT INTO users (name) VALUES (N'张三');
查询含中文条件也必须加 N 前缀并显式指定 COLLATE:
SELECT * FROM users WHERE name = N'张三' COLLATE Chinese_PRC_CI_AS;
若字段已设为 Chinese_PRC_CI_AS,此处 COLLATE 可省略;但只要字段仍是 Latin 规则,不加 N 前缀就会触发 Code Page 解析,中文当场变问号。

















