В арабском языке у нас есть такие символы, как ا (алеф) и أ (алеф с хамзой).
Пользователи пишут их взаимозаменяемо, и мы хотим искать их взаимозаменяемо. SQL Server обрабатывает их как отдельные символы. Как я могу заставить SQL рассматривать их как один и тот же символ?
Я подумал заменить любой أ (алеф с хамзой) на ا (алеф) при вставке, но у нас есть много альтернатив в арабском языке, не только ا (алеф) и أ (алеф с хамза).
Я попробовал Arabic_CI_AS
и , Arabic_CI_AI
но это не решает проблему.
Вот скрипт для восстановления проблемы:
CREATE TABLE [dbo].[TestTable] (
[ArabicChars] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ArabicChars] ASC
)
) ON [PRIMARY];
INSERT INTO TestTable values (N'احمد');
INSERT INTO TestTable values (N'أحمد');
SELECT *
FROM TestTable
WHERE ArabicChars like N'ا%';
Результат:
ArabicChars
احمد
(1 row(s) affected)
Желаемым результатом были бы обе строки, которые мы вставили.
sql-server
collation
Джордж Ботрос
источник
источник
ا and أ
Ответы:
Я провел несколько тестов, и я думаю, что это обходной путь, но он может выполнить вашу работу, поскольку сам по себе SQL не очень помогает.
если вы заметили, что юникоды этих символов близки друг к другу
так между أ и ا, это с 1571 по 1575 или если вы хотите убедиться, что вы получаете все, что между
убедитесь, что вы включили от 1569 до 1575
которые
Таким образом, чтобы убедиться, что вы включаете в поиск все похожие элементы, вы можете использовать регулярные выражения.
так что в этом случае вы получите все символы от ء до ا, включая все символы между 1569 и 1575
так что в этом случае, если ваша таблица имеет
запрос выше получит их все.
но вы заметите что-то смешное
если у вас есть столбец в качестве первичного ключа
Вы не сможете вставить эти 2 записи
потому что ء, أ, all все для SQL являются частью хамзы, которая является ء
Так что если вы запустите запрос
это покажет вам
Короче говоря,
в SQL أ не = в ا, потому что его 2 разные буквы хамза и алеф
но ء = آ = أ = ؤ = إ = ئ
они все хамза ء
источник
это одна из самых сложных проблем, через которые я прошел
так что я напишу вам все, что я пробовал, что не сработало, может быть, вы можете начать после этого
я создал ваш столбец, используя COLLATE Arabic_CI_AI, где CI = без учета регистра и AI = без учета акцента, и именно здесь предполагается, что он будет работать, потому что если вы выбрали другой язык, например, S и Š, он работает
я также попытался изменить параметры сортировки базы данных на Arabic_CI_AI по-прежнему не работает
Вы также можете сопоставить сценарий, как
SELECT * FROM TestTable ГДЕ ArabicChars COLLATE Arabic_CI_AI like 'ا%' COLLATE Arabic_CI_AI;
и это все еще не сработало
проверить эту статью говорит о той же проблеме, но с точки зрения сортировки
http://technet.microsoft.com/en-us/library/cc295829(SQL.90).aspx
это взято из статьи
вот еще один человек, который исследовал эту проблему, но не смог найти никакого решения http://www.siao2.com/2008/11/11/9056745.aspx
пытаясь игнорировать диакритические знаки или хамза, я думаю, что это невозможно в SQL Server в настоящее время
могут быть будущие версии
источник
Для целей, упомянутых в этом посте, вы можете использовать только: SQL_Latin1_General_CP1251_CI_AS [работает для арабского и персидского языков, а также для английских / латинских наборов символов].
источник