SQL Server中如何将GB2312编码文本转换为WINDOWS-1251并保存?
解决方案:GB2312转WINDOWS-1251编码(SQL Server)
1. 配置目标列
WINDOWS-1251是单字节编码,对应SQL Server的VARCHAR类型和Cyrillic_General_CI_AS排序规则。先准备好目标列:
新建列
ALTER TABLE YourTable ADD WIN1251_Column VARCHAR(MAX) COLLATE Cyrillic_General_CI_AS;
修改现有列(先备份数据)
ALTER TABLE YourTable ALTER COLUMN TargetColumn VARCHAR(MAX) COLLATE Cyrillic_General_CI_AS;
2. 执行编码转换
SQL Server通过CONVERT函数结合代码页ID实现编码转换:
- GB2312对应代码页936
- WINDOWS-1251对应代码页1251
转换需先将GB2312文本转成Unicode(NVARCHAR)作为中间层,再转成WINDOWS-1251编码的VARCHAR:
更新到新列
UPDATE YourTable SET WIN1251_Column = CONVERT(VARCHAR(MAX), CONVERT(NVARCHAR(MAX), GB2312_SourceColumn) COLLATE Cyrillic_General_CI_AS, 1251);
替换原列数据(已修改排序规则后)
UPDATE YourTable SET GB2312_SourceColumn = CONVERT(VARCHAR(MAX), CONVERT(NVARCHAR(MAX), GB2312_SourceColumn), 1251);
3. 关键注意事项
- 字符丢失风险:GB2312的中文字符大多不在WINDOWS-1251字符集内,转换后会变成
?占位符。先抽样验证数据,确认可接受此结果再批量转换。 - 备份优先:转换前一定要备份表数据,避免操作失误导致数据丢失。
- 长度适配:如果原列是固定长度
VARCHAR(n),建议先用VARCHAR(MAX)测试转换后的长度,再调整目标列长度。
内容的提问来源于stack exchange,提问作者Vicc
相关产品推荐
相关产品推荐

