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 具有波斯字符的NVARCHAR SQL类型问题_Sql Server_String_Tsql_Farsi - Fatal编程技术网

Sql server 具有波斯字符的NVARCHAR SQL类型问题

Sql server 具有波斯字符的NVARCHAR SQL类型问题,sql-server,string,tsql,farsi,Sql Server,String,Tsql,Farsi,我在使用NVARCHAR类型和波斯语字符“ی”和“ک”的SQL中遇到问题,我在表中有一些记录,如: +----- Name ------+ +----- علی ------+ select * from [Table] when Name like 'علی' select * from [Table] when Name='علی' select * from [Table] when Name like 'علي' select * from [Table] when Name='علي

我在使用NVARCHAR类型和波斯语字符“ی”和“ک”的SQL中遇到问题,我在表中有一些记录,如:

+----- Name ------+
+----- علی ------+
select * from [Table] when Name like 'علی'
select * from [Table] when Name='علی'
select * from [Table] when Name like 'علي'
select * from [Table] when Name='علي'
当我想从该表中进行选择时,如:

+----- Name ------+
+----- علی ------+
select * from [Table] when Name like 'علی'
select * from [Table] when Name='علی'
select * from [Table] when Name like 'علي'
select * from [Table] when Name='علي'
它返回空值!我发现,当我在字符串之前使用N时,它已被解决,但我需要在SP中使用N before参数,并尝试以下操作:

declare @name nvarchar(max)='علی'
select * from [Table] when Name like N''+@name
但不幸的是,它不起作用,我发现当我将“علی”分配给nvarchar时,会自动将“ی”转换为“ي”


如何修复此问题?

您似乎正在使用MS SQL Server。在这种情况下,N前缀表示unicode字符串

因此,无论何时设置unicode字符串,都应该使用N'*'。因此,您应该这样更改存储过程:

declare @name nvarchar(max)=N'علی'
select * from [Table] when Name like @name

1-搜索并找到数据库的最佳排序规则和Unicode。在每种情况下都可能有所不同

2-如果您使用的是编程语言,您可以在那里处理它。当您想要保存记录时,您应该更改并统一它们。这意味着您应该始终使用相同的字符。在保存中,更新并选择where子句


3-您可以触发插入和统一字符。

您不需要在Nvarchar参数之前使用N。 这将有助于:

declare @name nvarchar(max)='علی' -- or maybe you want  '%علی%'
select * from [Table] when Name like @name

可能的See副本您还应该规范化您的数据,使其仅包含波斯语yeh和keh,而不包含阿拉伯语yeh和keh。波斯语的更多信息:没关系,但不是我想要的东西,我想从SP参数化地给这个@name,它来自CNo,这将不起作用,或者至少,它不能保证起作用,这取决于您的数据库排序规则。字符串文本前面的N仍然是必需的,这已经在另一个答案中讨论过了。SQL Server不会根据文字的使用方式更改文字的类型;这隐式转换了一个VARCHAR3,该VARCHAR3很可能只包含???。