恢复SQL Server 2014数据库后泰米尔语数据显示乱码
解决SQL Server备份恢复后历史泰米尔语数据乱码问题
核心原因
新插入的nvarchar类型泰米尔语数据正常,说明目标SQL Server 2014 Express本身支持Unicode泰米尔语存储。乱码问题根源是原备份数据库与目标库的排序规则不匹配,导致恢复过程中历史数据的编码映射出错。
排查与解决步骤
1. 核对排序规则差异
- 查询目标数据库的默认排序规则:
SELECT name, collation_name FROM sys.databases WHERE name = '你的数据库名'; - 查询问题表字段的排序规则(对比原库可能的设置):
若字段排序规则与目标库默认规则不一致,就是乱码的直接诱因。SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('问题表名');
2. 按原排序规则重新恢复
若确认原库排序规则与目标库不同,恢复时显式指定原规则:
RESTORE DATABASE 目标库名 FROM DISK = '你的备份文件路径.bak' WITH REPLACE, MOVE '原库数据文件逻辑名' TO '目标路径\目标库数据文件.mdf', MOVE '原库日志文件逻辑名' TO '目标路径\目标库日志文件.ldf', COLLATE 原库排序规则名; -- 例如 Tamil_CI_AS,需匹配原库实际规则
提示:若不清楚原库规则,可尝试用泰米尔语专属排序规则
Tamil_CI_AS测试恢复。
3. 修复已恢复的乱码数据(若不想重恢复)
仅当原字段为nvarchar类型时有效(若原字段是varchar,Unicode信息已丢失,无法修复):
UPDATE 问题表名 SET 乱码字段名 = CONVERT(nvarchar(MAX), 乱码字段名) COLLATE Tamil_CI_AS;
执行后验证数据是否正常显示,若无效则必须重新按正确规则恢复备份。
4. 确认排序规则支持
SQL Server 2014 Express支持泰米尔语相关排序规则(如Tamil_CI_AS、Tamil_CS_AS),确保目标库使用的规则兼容泰米尔语字符。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

