Почему использование '' или "" не сортирует псевдонимы столбцов через ORDER BY в MySQL? - PullRequest
1 голос
/ 27 апреля 2020

Сегодня во время сеанса обучения в реальном времени с моим другом Думисани Ндубане мы обнаружили небольшое изменение в поведении при использовании ORDER BY для сортировки набора результатов с псевдонимом столбца с использованием типов кавычек ``, '' или "" .

'' и "" не влияют на сортировку, только `` работает, но все кавычки могут делать псевдонимы столбцов. См. Запросы ниже;

  1. Сортировка Полного имени в порядке возрастания (с использованием `` кавычек на псевдониме столбца):
SELECT
    CONCAT_WS(', ', lastName, firstname) `Full name`
FROM
    employees
ORDER BY
    `Full name`;

enter image description here

Это не сортирует набор результатов. Обратите внимание, что мы использовали '' кавычки
SELECT
    CONCAT_WS(', ', lastName, firstname) 'Full name'
FROM
    employees
ORDER BY
    'Full name';

enter image description here

Это не сортирует набор результатов. Обратите внимание, что мы использовали "" кавычки
SELECT
    CONCAT_WS(', ', lastName, firstname) "Full name"
FROM
    employees
ORDER BY
    "Full name";

enter image description here

Кроме того, мы использовали MySQL версия mysql Ver 8.0.19 for osx10.13 on x86_64 (Homebrew) на Ма c , Является ли это намеренным, есть ли объяснение этому поведению? Кроме того, почему бы не придерживаться обратных кавычек (``) с MySQL идентификаторами и '' или "" для строковых литералов. Зачем их смешивать?

Я думаю, что это может быть улучшение пользовательского опыта для MySQL, потому что текущий статус-кво кажется сбивающим с толку новичка ie, пытающегося учиться.

Что думаю, что SO сообщество заранее и спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Одинарные кавычки (и, в MySQL, двойные кавычки) обозначают буквенные строки. Так что 'Full name' - это всего лишь буквальная строка. Использование этого для сортировки не имеет смысла, так как значение является постоянным для всех строк: в результате порядок строк будет undefined , что означает, что база данных может свободно возвращать строки в любом порядке.

Вместо этого используйте обратные пометки, которые используются для идентификаторов, поэтому order by относится к псевдонимам выражений в предложении select.

Или еще лучше, используйте псевдоним, который не требует цитируя, так что вам не нужно об этом беспокоиться.

2 голосов
/ 27 апреля 2020

Во втором примере используется

ORDER BY 'Full Name'

Это строковый литерал, который является постоянным значением. Он не относится к псевдониму столбца тех же символов.

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

Строки в двойных кавычках также обрабатываются как строковые литералы по умолчанию в MySQL. Это отличается от ANSI SQL, где двойные кавычки являются разделителями идентификаторов. MySQL делает это, если вы установите sql_mode=ANSI или sql_mode=ANSI_QUOTES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...