NVARCHAR Проблема типа SQL с персидским символом - PullRequest
0 голосов
/ 02 июля 2019

У меня проблема в SQL с типом NVARCHAR и персидскими символами 'ی' и 'ک', у меня есть некоторые записи в таблице, такие как:

+----- 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 перед строками, это решается, но мне нужно использовать N перед параметром в SP и попробовать это:

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

Но, к сожалению, это не работает, и я обнаружил, что когда я назначаю 'علی' для nvarchar, автоматически 'ی' преобразуется в 'ي' !!!

Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

1- Поиск и поиск лучших Collation и Unicode для вашей базы данных. Это может быть различным в каждом случае.

2- Если вы используете язык программирования, вы можете справиться с ним там. Если вы хотите сохранить запись, вы должны изменить ی ک ه и объединить их. Это означает, что вы всегда должны использовать один и тот же символ. При сохранении обновите и выберите (в предложении where).

3- Вы можете создать триггер для Insert и объединить символы.

0 голосов
/ 05 июля 2019

Вам не нужно использовать N перед параметром Nvarchar. Это будет работать:

declare @name nvarchar(max)='علی' -- or maybe you want  '%علی%'
select * from [Table] when Name like @name
0 голосов
/ 02 июля 2019

Похоже, вы используете MS SQL Server.В этом случае префикс N обозначает строку Unicode.

Таким образом, вы должны использовать N '*' всякий раз, когда вы устанавливаете строку Unicode.Поэтому вам следует изменить хранимую процедуру следующим образом:

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