2012-11-16 10 views
5

Я пытаюсь ознакомиться с Postgres (9.2) после справедливого использования MySQL (5.1), так как меня укусил несколько MySQL's gotchas. Тем не менее, в моих первых пяти минут с Postgres я столкнулся с одним из its gotchas, который я уверен, хиты всех:Почему PostgreSQL по умолчанию все в нижнем регистре?

  • По умолчанию PostgreSQL конвертирует все, что не приводит слова в нижний регистр.

Это не слишком большое дело для меня, так как есть несколько очевидных обходные:

  • Инкапсулируйте все в кавычках.
  • Позвольте, чтобы все было названо в нижнем регистре.

Но мне интересно, почему. Учитывая, насколько я могу предположить, что это дизайнерское решение вызывает, я удивляюсь, что не могу найти никаких оснований в Интернете. Есть ли у кого-нибудь подробное объяснение или, желательно, ссылка на какой-то манифест разработчика, почему Postgres был спроектирован таким образом? Я заинтересован.

+0

Вы спрашиваете об этом? http://stackoverflow.com/questions/153944/is-sql-syntax-case-sensitive?rq=1 –

+3

AFAIK, стандарт говорит, что некотируемые идентификаторы должны быть свернуты в верхний регистр, [PostgreSQL складывается в нижний регистр] (http : //stackoverflow.com/a/8736088/479863). Складывание в верхний или нижний регистр не должно иметь значения, если вы иногда цитируете свои идентификаторы, но если вы это делаете, вы заслуживаете того, что получаете. Вы можете «создать таблицу« Блины »(...)' и 'select * from Pancakes', просто не создавайте таблицу« Блины »(...)' и пытайтесь «выбрать» из «Блинчиков». У людей MySQL, похоже, есть эта странная привычка к возврату - цитирование всего, потерять эту привычку. –

+0

@muistooshort Я вообще видел утверждения о том, что спецификация SQL не указывает, должно ли фальцовка складываться в верхний или нижний регистр, только чтобы это произошло. Вы знаете, где это указано, чтобы сбросить в верхний регистр? (Я ищу ссылки, но не нахожу много полезного в данный момент). –

ответ

6

В стандарте SQL указаны фальцевальные идентификаторы без кавычек в верхний регистр. Таким образом, многие другие РСУБД следуют стандарту. Firebird и Oracle - оба. Это означает, что сопоставление идентификаторов по умолчанию нечувствительно к регистру. Такое поведение очень важно, когда речь идет о совместимости в базовых запросах. В этом отношении поведение MySQL является реальным выбросом.

Однако PostgreSQL отклоняется от стандарта, складывая его в нижний регистр. Есть общие причины, почему это считается более читаемым и т. Д., Потому что вы можете использовать case для синтаксиса cuing. Что-то вроде:

SELECT foo FROM bar WHERE baz = 1; 

Это более естественно, когда случаи складываются вниз. Альтернатива складной будут противоположное:

select FOO from BAR where BAZ = 1; 

В общем, как бывшем поведении (складывающийся в нижний регистр) подчеркивает еще потому SQL-операции лучше одновременно складывая в другом случае де-подчеркивают операции и подчеркивают идентификаторы. Учитывая сложность многих запросов, я думаю, что первое работает лучше.

В целом большинство обсуждений, которые я видел в списках рассылки postgres, состояло в том, что все согласны с нарушением стандартного мандата. поэтому выше мое понимание проблем.

+0

Я не понимаю контекста строки «В этом отношении поведение MySQL - это реальный выброс». Вы имели в виду «Postgres» вместо «MySQL»? Или здесь есть какой-то другой контекст для «MySQL», который я пропустил? –

+0

Ссылка на MySQL gotchas и PostgreSQL gotchas. –

Смежные вопросы