我在使用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时,会自动将'ی'转换为'ي'!!!
我该如何解决?
答案 0 :(得分:0)
似乎您正在使用MS SQL Server。在这种情况下,N前缀表示一个Unicode字符串。
因此,每当设置unicode字符串时,都应使用N'*'。因此,您应该像这样更改存储过程:
declare @name nvarchar(max)=N'علی'
select * from [Table] when Name like @name
答案 1 :(得分:0)
1-搜索并为您的数据库找到最佳的Collation
和Unicode
。在每种情况下都可以不同。
2-如果使用的是编程语言,则可以在那里进行处理。要保存记录时,应更改ی ک ه
并统一它们。这意味着您应该始终使用相同的字符。在保存中,更新并选择(在where子句中)。
3-您可以为Insert
触发并统一字符。
答案 2 :(得分:-1)
您不需要在Nvarchar参数之前使用N。 这将起作用:
declare @name nvarchar(max)='علی' -- or maybe you want '%علی%'
select * from [Table] when Name like @name