Синтаксис mysql чувствителен к регистру? могу ли я написать: select, где? [Дубликат]

Более уместно, чтобы он даже поддерживал голоновые версии

    datePickerDialog.setCustomTitle(null);
168
задан Steve Tranby 30 September 2008 в 17:49
поделиться

10 ответов

Ключевые слова SQL не чувствительны к регистру (SELECT, FROM, WHERE и т. д.), но часто записываются во всех кепках. Однако в некоторых настройках имена таблиц и столбцов чувствительны к регистру. У MySQL есть опция конфигурации для включения / выключения. Обычно регистрозависимые имена таблиц и столбцов являются стандартными для Linux MySQL и без учета регистра, которые по умолчанию используются в Windows, но теперь установщик спросил об этом во время установки. Для MSSQL это функция настройки сопоставления базы данных.

Вот страница MySQL о названии case-sensitive

Вот статья в MSDN о сопоставлениях для MSSQL

155
ответ дан RevanthKrishnaKumar V. 19 August 2018 в 13:29
поделиться
  • 1
    Некоторые системы (например, PostgreSQL) чувствительны к регистру в именах таблиц и столбцов, но пытаются скрыть их посредством нижнего или верхнего регистра всех имен перед их просмотром. В этих системах вам придется заключить имя таблицы в «двойные кавычки», чтобы убедиться, что точное имя, которое вы ввели, проверяется. – Michael Ratanapintha 30 September 2008 в 18:12
  • 2
    & quot; но они часто записываютс во всех шапках " Я не согласен, это просто предпочтение, я всегда видел противоположное на самом деле – BlackTigerX 6 February 2009 в 18:53
  • 3
    Например, если сервер MS Sql установлен с использованием чувствительной к регистру сортировки, то столбец, столбцы, имена переменных становятся чувствительными к регистру, даже если база данных не учитывает регистр. – Vadym Stetsiak 17 September 2009 в 09:34
  • 4
    @BlackTigerX - В руководствах Oracle есть все примеры SQL с ключевыми словами (SELECT, FROM, WHERE и т. Д.), Написанные в верхнем регистре, но имена таблиц и столбцов в нижнем регистре. – J. Polfer 24 June 2010 в 14:53
  • 5
    Хм, это все еще верно для mysql? Я думал, что у меня установлена ​​установка mysql по умолчанию, и она нечувствительна к именам столбцов. – Kzqai 26 May 2011 в 17:46

В Sql Server это опция . Включение его в отстой.

Я не уверен в MySql.

15
ответ дан a_horse_with_no_name 19 August 2018 в 13:29
поделиться
  • 1
    В MySql нечувствительность к регистру - это вариант, который вы можете включить и выключить. Просто эта нечувствительность не работает, как вы предполагали, это будет делать на Linux, если файловая система чувствительна к регистру (по умолчанию). Вы должны сделать файловую систему без учета регистра в Linux, чтобы нечувствительность к ошибкам mysql работала так же, как на окнах (= правильно). Особенно включение / выключение после некоторой работы в другом режиме может иметь плохие последствия. – Stefan Steiger 6 June 2014 в 08:23

Это не строго язык SQL, а в SQL Server, если сортировка базы данных чувствительна к регистру, тогда все имена таблиц чувствительны к регистру.

22
ответ дан Cade Roux 19 August 2018 в 13:29
поделиться

Нет. MySQL не чувствителен к регистру, и ни один из них не является стандартом SQL. Это обычная практика для написания команд в верхнем регистре.

Теперь, если вы говорите о именах таблиц и столбцов, то да, они есть, но не сами команды.

So

SELECT * FROM foo;

совпадает с

select * from foo;

, но не совпадает с

select * from FOO;
3
ответ дан cmcculloh 19 August 2018 в 13:29
поделиться
  • 1
    В большинстве СУБД имена таблиц также не чувствительны к регистру. По крайней мере, не по умолчанию. MySQL является самым заметным исключением из этого правила. – user 12 July 2013 в 09:35

Я понимаю, что стандарт SQL требует нечувствительности к регистру. Я не верю, что базы данных полностью соответствуют стандарту.

MySQL имеет настройку конфигурации как часть своего «строгого режима» (сумка для захвата нескольких настроек, которые делают MySQL более совместимым со стандартами) для регистрозависимые или нечувствительные имена таблиц. Независимо от этого параметра, имена столбцов по-прежнему нечувствительны к регистру, хотя я думаю, что это влияет на отображение имен столбцов. Я считаю, что этот параметр является экземпляром для всех баз данных в экземпляре RDBMS, хотя сегодня я исследую это, чтобы подтвердить это (и надеюсь, что ответ будет отрицательным).

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

SELECT fieldName
FROM tableName;

будет запрашивать имя поля из tablename, но

SELECT "fieldName"
FROM "tableName";

будет запрашивать имя поля из tableName.

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

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

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

На мой взгляд, MySQL особенно плохо разбирается в этом на разных платформах. Нам нужно иметь возможность удалять базы данных в Windows и загружать их в UNIX, и это катастрофа, если установщик в Windows забыл включить RDBMS в режим, чувствительный к регистру. (Чтобы быть справедливым, часть причины, по которой это катастрофа, - это то, что наши кодеры давно уже ошибочно полагались на чувствительность к регистру MySQL в UNIX.) Люди, которые написали установщик Windows MySQL, сделали это очень удобным и Windows-like, и было здорово продвигаться к тому, чтобы дать людям чекбокс, чтобы сказать: «Хочешь включить строгий режим и сделать MySQL более стандартным?» Но MySQL очень удобен в том, что он отличается от стандарта стандартным, а затем ухудшается, оборачиваясь и отличаясь от своего собственного стандарта де-факто на разных платформах. Я уверен, что в разных дистрибутивах Linux это может быть еще более усугублено, так как упаковщики для разных дистрибутивов, вероятно, иногда использовали свои собственные предпочтительные настройки конфигурации MySQL.

Здесь Вопрос, который обсуждается, если чувствительность к регистру желательно в РСУБД.

11
ответ дан Community 19 August 2018 в 13:29
поделиться

Я не думаю, что SQL Server чувствителен к регистру, по крайней мере, не по умолчанию.

Когда я запрашиваю вручную через Management Studio, я все время исповедую дело, и он с готовностью принимает его :

select cOL1, col2 FrOM taBLeName WheRE ...
1
ответ дан Dana 19 August 2018 в 13:29
поделиться

SQL-ключевые слова сами по себе нечувствительны к регистру.

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

Сравнение данных с использованием =,>, & lt; и т. д., имеет информацию о случаях, которая зависит от настроек сортировки, которые используются в отдельной базе данных, таблице или столбце, о котором идет речь. Это нормально, однако, держать сопоставление достаточно последовательным в базе данных. У нас есть несколько столбцов, которые должны хранить значения, чувствительные к регистру; они имеют определенную настройку.

2
ответ дан MarkR 19 August 2018 в 13:29
поделиться

Я нашел этот пост в блоге , чтобы быть очень полезным (я не автор). Подводя итог (пожалуйста, прочитайте, хотя):

... идентификаторы с разделителями чувствительны к регистру ("table_name"! = "Table_Name"), тогда как идентификаторы без кавычек не являются и преобразуются в верхний регистр (table_name => TABLE_NAME).

Он обнаружил, что DB2, Oracle и Interbase / Firebird совместимы на 100%:

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

4
ответ дан Stefan van den Akker 19 August 2018 в 13:29
поделиться

Спецификация SQL92 указывает, что идентификаторы могут быть указаны или не кавычки. Если обе стороны не сортируются, то они всегда чувствительны к регистру, например. table_name == TAble_nAmE.

Однако цитируемые идентификаторы чувствительны к регистру, например. "table_name" != "TAble_naME". Также, основываясь на спецификации, если вы хотите сравнить неотображаемые идентификаторы с цитируемыми, то идентификаторы без кавычек и кавычек могут считаться одинаковыми, если неуказанные символы в верхнем регистре, например. TABLE_NAME == "TABLE_NAME", но TABLE_NAME != "table_name" или TABLE_NAME != "TAble_NaMe".

Вот соответствующая часть спецификации (раздел 5.2.13):

     13)A <regular identifier> and a <delimited identifier> are equiva-
        lent if the <identifier body> of the <regular identifier> (with
        every letter that is a lower-case letter replaced by the equiva-
        lent upper-case letter or letters) and the <delimited identifier
        body> of the <delimited identifier> (with all occurrences of
        <quote> replaced by <quote symbol> and all occurrences of <dou-
        blequote symbol> replaced by <double quote>), considered as
        the repetition of a <character string literal> that specifies a
        <character set specification> of SQL_TEXT and an implementation-
        defined collation that is sensitive to case, compare equally
        according to the comparison rules in Subclause 8.2, "<comparison
        predicate>".

Обратите внимание, что как и в других частях стандарта SQL, не все базы данных следуют этому полностью. PostgreSQL, например, хранит все некотируемые идентификаторы с нижним регистром вместо верхнего, поэтому table_name == "table_name" (что точно соответствует стандарту). Кроме того, некоторые базы данных нечувствительны к регистру все время, или чувствительность к регистру зависит от некоторых параметров в БД или зависит от некоторых свойств системы, как правило, зависит от того, является ли файловая система чувствительной к регистру или нет.

Обратите внимание, что некоторые инструменты базы данных могут посылать идентификаторы, котируемые все время, поэтому в случаях, когда вы смешиваете запросы, сгенерированные каким-то инструментом (например, запрос CREATE TABLE, созданный Liquibase или другим инструментом миграции базы данных), с запросами вручную (например, простой JDBC в вашем приложении), вы должны убедиться, что случаи согласованы, особенно в базах данных, где котируемые и некотируемые идентификаторы отличаются (DB2, PostgreSQL и т. Д.)

9
ответ дан SztupY 19 August 2018 в 13:29
поделиться

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

См. SQL-92 Sec. 5.2 [/ д2]

15
ответ дан Turnkey 19 August 2018 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: