SQL Server 2019:西里尔排序规则varchar列插入希腊字符失败求解
西里尔排序规则varchar列插入希腊字母乱码问题解答
核心原因:西里尔排序规则(Cyrillic_General_CI_AS)的varchar列与希腊字符不兼容。varchar类型依赖排序规则对应的代码页,Cyrillic_General_CI_AS对应的是Windows代码页1251,这个代码页仅包含西里尔字符和基础拉丁字符,没有希腊字母的编码空间,所以插入希腊字符时会被替换成问号(???)。
不存在同时保留varchar类型和西里尔排序规则的有效解决方案。代码页的限制无法突破,要么放弃varchar改用nvarchar,要么放弃西里尔排序规则改用包含希腊字母的排序规则(但这样西里尔字符会出现乱码)。
最优解决方案:将列类型改为nvarchar,同时保留西里尔排序规则。nvarchar基于Unicode存储,不受单一代码页限制,能同时兼容西里尔和希腊字符,且排序规则仍能正常生效。修改后的代码如下:
CREATE TABLE dbo.tmp ( id int NOT NULL , name nvarchar(75) collate Cyrillic_General_CI_AS ) INSERT INTO dbo.tmp (id, name) VALUES (1, N'Εργ Μας'); SELECT * FROM dbo.tmp;
内容的提问来源于stack exchange,提问作者Ivan69
相关产品推荐
相关产品推荐

