Sql server 具有波斯字符的NVARCHAR SQL类型问题
我在使用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='علي
+----- 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很可能只包含???。