Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 类SQL表达式找不到半空格字符(零宽度非连接符(ZWNJ))_Sql Server_Unicode_Internationalization_Codepages - Fatal编程技术网

Sql server 类SQL表达式找不到半空格字符(零宽度非连接符(ZWNJ))

Sql server 类SQL表达式找不到半空格字符(零宽度非连接符(ZWNJ)),sql-server,unicode,internationalization,codepages,Sql Server,Unicode,Internationalization,Codepages,在下面的代码中,我想选择这个令牌包含半个空格字符的令牌 Select * from (select token = 'aaa‏‏sss') as dd where token like '%‏‏%' 正面回应: aaa‏‏sss null 输出响应: aaa‏‏sss null 符号: 此字符是波斯字符,未显示可视标记。 但这个字符将字符串的两侧分开。 例如:带半空格的令牌为‌若要知道要使用的特定值,需要知道基础列的数据类型是什么,是VA

在下面的代码中,我想选择这个令牌包含半个空格字符的令牌

  Select *  from
     (select token = 'aaa‏‏sss') as dd
  where token like '%‏‏%'
正面回应:

    aaa‏‏sss
   null
输出响应:

    aaa‏‏sss
   null
符号: 此字符是波斯字符,未显示可视标记。 但这个字符将字符串的两侧分开。
例如:带半空格的令牌为‌若要知道要使用的特定值,需要知道基础列的数据类型是什么,是VARCHAR还是NVARCHAR? 此外,对于前者,您还需要进一步了解该数据库使用的代码页

一般来说,您必须使用转义序列,例如

“abc\x008Adef”其中\x008A是底层编码系统中半空间的适当代码。 该值在代码页设置中可能介于0x0080和0x00FF之间,在Unicode中可能类似于0x2000。 事实上,如果您使用unicode字符串,您将需要在转义序列中省略“x”,只需使用 N'abc\2000def',假设hex 2000实际上是您心目中的半空间


另一种可能的解决方法是,底层数据库上使用的排序规则将这半个空格作为普通空格处理,因此您可以在查询中只使用常规空格字符。有点像人们使用基于1252代码页的排序规则,其中重音字符被认为等同于非重音形式。

我找到了这个问题的解决方案。 如果我们将字符“N”放在模式字符串之前,响应将被更正。 字符N表示它后面的字符串是Unicode。 更正代码:

  Select *  from
     (select token = 'aaa‏‏sss') as dd
  where token like N'%‏‏%'

我认为问题在于校勘

例如,此查询:

select PATINDEX('%‏‏%','aaa‏‏sss' collate  Arabic_CI_AS)
返回1,但这一个:

select PATINDEX('%‏‏%','aaa‏‏sss' collate  SQL_Latin1_General_CP1_CI_AS)
返回4;这是输入字符串中半空格字符的正确位置


因此,您必须将输入字符串的排序规则更改为一些拉丁排序规则,如:SQL\u Latin1\u General\u CP1\u CI\u AS

您的答案是正确的,带有英文字符。但是由波斯语字符组成的字符串是错误的。波斯语的正确排序规则是:波斯语为:Persian_100_BIN或Persian_100_Bin2,阿拉伯语为:阿拉伯语为TehMarbute char。