Почему одинаковые слова сортируются по-разному в разных базах

Буквы, регистр и цифры в названии требуют правил сравнения. Объясняем collation на примере каталога и разбираем, что проверить при переносе списка между системами.

Два светлых держателя содержат одинаковые оранжевые и графитовые карточки, расположенные в разном порядке.

Один каталог, два непривычных порядка

Представим условный каталог учебных материалов. Его перенесли в другую систему, и пользователи заметили, что названия с буквой «ё», заглавными буквами и цифрами расположены иначе. При этом сами названия не изменились. Причина может находиться в правилах сравнения текста, а не в потере записей при переносе.

Такие правила часто называют collation. Они определяют, как сопоставлять текстовые значения и какие различия учитывать. В PostgreSQL — системе управления базами данных — правила можно связывать с конкретными текстовыми данными и операциями. Поэтому выражения «по алфавиту» недостаточно для точного описания поведения во всех случаях.

Код символа не задаёт единственный человеческий порядок

Стандарт Unicode Collation Algorithm объясняет, что порядок зависит от языка, назначения списка и выбранных настроек. Один универсальный порядок кодов символов не может соответствовать всем языковым ожиданиям. Словарь, телефонный справочник и технический перечень могут предъявлять разные требования даже в пределах одного языка.

В нашем каталоге сначала нужно договориться о задаче. Для человека, который ищет название глазами, полезны привычные языковые правила. Для точного сопоставления технических идентификаторов могут быть важны различия, которые в обычном чтении кажутся незначительными. Ни один из вариантов не следует объявлять правильным без связи с назначением списка.

Какие различия учитываются

При сравнении могут иметь значение основной знак, диакритика — дополнительные элементы буквы, — регистр и пунктуация. Но конкретное поведение зависит от выбранного правила. Нельзя по одному названию языка обещать, что заглавные буквы всегда пойдут первыми или что все варианты с «е» и «ё» будут одинаково обработаны в любой системе.

Для учебной проверки предложим небольшой набор: названия, начинающиеся с «Е» и «Ё», одинаковые слова с разным регистром и два названия с числами два и десять, записанными цифрами. Нужно заранее описать ожидаемый порядок и отдельно решить, какие значения считаются различными. Это проверка требований, а не готовая настройка базы.

Откуда PostgreSQL получает правила

В документации PostgreSQL описаны разные поставщики правил, включая системную библиотеку и ICU — библиотеку поддержки языковых соглашений. Доступность и поведение связаны с поставщиком, его версией и локалью. Локаль — набор региональных и языковых настроек. Перенос между окружениями требует учитывать эту связку.

Для нашего примера предложим хранить описание принятого поведения рядом с требованиями к каталогу. Тогда при обновлении системы можно повторить ту же проверку и увидеть изменение. Перечень ожидаемых результатов полезнее неопределённого обещания «как раньше», особенно если старое поведение никто явно не зафиксировал.

Сортировка и равенство связаны, но вопросы различаются

Пользователь может хотеть видеть похожие названия рядом, но всё равно различать их как отдельные записи. Некоторые варианты сравнения PostgreSQL допускают равенство текстов, которые различаются представлением, например регистром при подходящих настройках. Поэтому изменение правил нужно рассматривать не только как косметическую перестановку списка, но и в контексте операций сравнения.

Предлагаемый порядок обсуждения: определить цель списка, составить примеры, записать ожидаемую сортировку и ожидаемое равенство, затем проверить выбранную реализацию. Если при переносе результат изменился, сначала сравните правила и версии. Исправлять сами названия только ради привычного порядка без выяснения причины не стоит: так можно изменить смысл исходных сведений.

Как связать это с изучением данных

Общее назначение языка раскрывает введение в SQL. О вспомогательных структурах поиска рассказывает статья об индексах. Понятность порядка для читателя и эффективность поиска — разные требования, которые стоит обсуждать вместе при проектировании каталога.

Изучать работу с таблицами можно на курсе SQL инженер. Для первого разбора достаточно объяснить, почему одинаковое содержимое не гарантирует одинакового порядка в разных окружениях, и показать несколько примеров ожидаемого поведения без записи программных выражений.

SQL инженер
Курс
Доступ сразу
SQL инженер

SQL инженер — это специалист, который работает с базами данных, разрабатывает запросы, оптимизирует хранение данных и обеспечивает эффективную работу с информацией в компаниях.

С нуля до junior
Теория и практика
Диплом по окончании
500
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
46

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
42

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.