是否可以从没有N
前缀的损坏的 nvarchar 中恢复 UTF8 数据?
例如,在以下代码段中,我希望@n1_fixed
基于以下内容获得正确的值@n1
:
declare
@n1 nvarchar(10) = 'Ḿấxiḿứś',
@n2 nvarchar(10) = N'Ḿấxiḿứś';
declare
@n1_fixed nvarchar(10); -- somehow make it have the correct value, based on @n1
select iif(@n1_fixed = @n2, 1, 0)
无法恢复原始值。
不带前缀表示国家字符的字符常量
N
将根据数据库默认排序规则代码页进行翻译。在源字符不存在明确映射的情况下,该值将更改为备用字符。此回退可能是相似但不同的字符或?
不存在替代字符时的值。您可以通过将值转换为 varbinary 来观察这一点。
SQL_Latin1_General_CP1_CI_AS
使用代码页 1252 的默认数据库排序规则示例:具有
Albanian_100_CI_AS
数据库默认排序规则的相同脚本的结果显示,由于 1250 代码页,最后一个字符已正确映射,但字符更改为“?” 后备将像前面的示例一样永久丢失。