波斯字符的NVARCHAR SQL类型问题

时间:2019-07-02 12:25:33

标签: 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='علي'

它返回NULL!我发现当我在字符串之前使用N时可以解决,但是我需要在SP中使用N before参数并尝试以下操作:

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

但是不幸的是,它无法正常工作,我发现当我将'علی'分配给nvarchar时,会自动将'ی'转换为'ي'!!!

我该如何解决?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

1-搜索并为您的数据库找到最佳的CollationUnicode。在每种情况下都可以不同。

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

3-您可以为Insert触发并统一字符。

答案 2 :(得分:-1)

您不需要在Nvarchar参数之前使用N。 这将起作用:

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