SQL Server更新时保留特殊字符与重音的排序规则问题咨询
解决SQL更新时重音字符与特殊符号丢失的问题
你的问题根源在于当前使用的SQL_Latin1_General_CP1_CI_AS排序规则是基于单字节Latin1编码的,它无法完整支持Unicode范畴的重音字符(比如H膩w墨里的重音)和特殊符号(比如左单引号驶),更新时这些字符会被自动转换为相近的普通字符或者直接丢失。
下面是具体的解决步骤:
第一步:修改列的数据类型与排序规则
首先需要将两个表中存储名称的列切换为支持Unicode的nvarchar类型,并搭配支持特殊字符的排序规则。推荐使用Latin1_General_100_CI_AS_SC——其中SC代表Supplementary Characters,专门用于支持各类特殊Unicode字符,同时保留不区分大小写的特性。
执行以下SQL语句修改列:-- 修改Table1的Cname列 ALTER TABLE Table1 ALTER COLUMN Cname NVARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC; -- 修改Table2的Correct_CCname列 ALTER TABLE Table2 ALTER COLUMN Correct_CCname NVARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC;注意:如果表中已有数据,修改类型前最好先备份,避免数据意外丢失。如果之前的
varchar列已经导致特殊字符损坏,可能需要重新导入原始的Unicode格式数据到nvarchar列中。第二步:重新执行更新语句
列类型和排序规则修改完成后,再运行你原来的UPDATE语句:UPDATE T1 SET T1.Cname = T2.Correct_CCname FROM Table1 AS T1 INNER JOIN Table2 AS T2 ON T1.Ccode = T2.Ccode此时
nvarchar列会完整保留Correct_CCname中的重音和特殊符号。可选:根据业务需求调整排序规则
如果你需要区分重音(比如区分Hawi和Háwi),可以使用Latin1_General_100_CS_AS_SC(CS表示区分大小写,AS表示区分重音);如果不需要区分大小写但要区分重音,用Latin1_General_100_CI_AS_SC即可。
内容的提问来源于stack exchange,提问作者Kumar2127
相关产品推荐
相关产品推荐

