繁体   English   中英

T-SQL替换“西里尔符号”返回'????'

[英]T-SQL Replace “cyrillic symbols” returns '????'

我有一个函数将CSV列表转换为表中的nvarchar(max)记录。 我注意到它不适用于西里尔语,问题是这里取代:

DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'

如何使替换与西里尔符号一起使用? 例如'тест'。

@List是NVARCHAR(MAX),我正在使用SQL Server 2012。

您是否将@List变量定义为nvarchar? 替换将与nvarchars一起正常工作

declare @list nvarchar(50) = N'те,ст'
select @list
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'

N''表示法用于声明Unicode字符串文字。 如果您定义了一个变量NVARCHAR,它将自动启用Unicode(因此不需要(或者更确切地说:无法)为@variables另外声明N - 它是字符串文字的一部分)。

由于您在SELECT N'тест'获得了西里尔字符,因此您应该检查变量@List的分配位置以及它的值。

不确定CSV解析器如何处理Unicode字符,但问题的根源可能是

  • 不处理文件编码
  • 在分配给@List之前分配VARCHAR列或变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM