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%' разрешается через поиск по индексу).

Вы можете также рассмотреть возможность изменения параметров сортировки базы данных, но это не будет каскадно распространяться на уже существующие столбцы таблиц, созданные по старому параметру.

Другие вопросы по тегам