Microsoft SQL Server не возвращает все при использовании предложения LIKE
У меня есть Products
таблица в SQL Server 2014 Express с записями в ней.
Вот несколько названий продуктов (записей):
- Тестовый продукт
- Teszt termék
- Teszt termék 2
Когда я выполняю следующий запрос, все работает просто отлично:
SELECT *
FROM Products
WHERE name LIKE 'te%'
Извлекает все три записи. Тем не менее, когда я использую
SELECT *
FROM Products
WHERE name LIKE 'tes%'
выполняется, только "Тестовый продукт" извлекается. И когда запрос
SELECT *
FROM Products
WHERE name LIKE 'tesz%'
затем он снова работает, он выбирает все записи, начинающиеся с "Tesz".
Есть идеи, в чем может быть проблема?
Заранее благодарны за Вашу помощь.
1 ответ
Я скачал вашу резервную копию.
Сортировка базы данных установлена на Hungarian_CI_AS
,
СЗ трактуется как буква по-своему на венгерском языке ( тридцать вторая буква венгерского алфавита). Если вы не хотите такого поведения, вам нужно избегать венгерских сопоставлений, и оно должно работать. (Я протестировал все сопоставления SQL Server 2014 с именами, заканчивающимися CI_AS
и только те, которые показывают поведение Hungarian_CI_AS
, Hungarian_100_CI_AS
, SQL_Hungarian_CP1250_CI_AS
)
Вы можете сделать это, изменив сопоставление столбцов (предпочтительно) или добавив явное COLLATE
предложение к запросу (менее эффективно и будет блокировать запросы, такие как WHERE name LIKE 'tes%'
разрешается через поиск по индексу).
Вы можете также рассмотреть возможность изменения параметров сортировки базы данных, но это не будет каскадно распространяться на уже существующие столбцы таблиц, созданные по старому параметру.