prima La sintassi SQL è sensibile al maiuscolo/minuscolo?




sql prima lettera maiuscola (8)

Questo non è strettamente linguaggio SQL, ma in SQL Server se le regole di confronto del database sono sensibili al maiuscolo / minuscolo, quindi tutti i nomi delle tabelle sono sensibili al maiuscolo / minuscolo.

È SQL case sensitive. Ho usato MySQL e SQL Server che sembrano entrambi sensibili al caso. È sempre così? Lo standard definisce la case-sensitivity?


La SQL-92 afferma che gli identificatori potrebbero essere quotati o non quotati. Se entrambi i lati non sono quotati, sono sempre senza distinzione tra maiuscole e minuscole, ad esempio table_name == TAble_nAmE .

Tuttavia gli identificatori citati sono case-sensitive, ad esempio "table_name" != "TAble_naME" . Anche in base alle specifiche se desideri confrontare gli identificatori non aggiornati con quelli quotati, allora gli identificatori non quotati e quotati possono essere considerati uguali, se i caratteri non quotati sono maiuscoli, ad esempio TABLE_NAME == "TABLE_NAME" , ma TABLE_NAME != "table_name" o TABLE_NAME != "TAble_NaMe" .

Ecco la parte rilevante della specifica (sezione 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>".

Nota che, proprio come con altre parti dello standard SQL, non tutti i database seguono completamente questa sezione. PostgreSQL per esempio memorizza tutti gli identificatori non quotati in minuscolo anziché in maiuscolo, quindi table_name == "table_name" (che è esattamente l'opposto dello standard). Inoltre, alcuni database non fanno mai distinzione tra maiuscole e minuscole, oppure la sensibilità alla distinzione tra maiuscole e minuscole dipende da alcune impostazioni nel DB o dipende da alcune proprietà del sistema, in genere dal fatto che il filesystem non distingue tra maiuscole e minuscole.

Si noti che alcuni strumenti di database potrebbero inviare identificatori quotati tutto il tempo, quindi nei casi in cui si mescolano query generate da alcuni strumenti (come una query CREATE TABLE generata da Liquibase o altro strumento di migrazione DB), con query fatte manualmente (come una semplice selezione JDBC) nella tua applicazione) devi assicurarti che i casi siano coerenti, specialmente sui database in cui gli identificatori quotati e non quotati sono diversi (DB2, PostgreSQL, ecc.)


Gli identificatori e le parole riservate non dovrebbero essere case sensitive, sebbene molti seguano una convenzione per utilizzare le maiuscole per le parole riservate e il caso Pascal per gli identificatori.

Vedi SQL-92 Sec. 5.2


No. MySQL non è case sensitive e nessuno dei due è lo standard SQL. È solo una pratica comune scrivere i maiuscoli.

Ora, se stai parlando di nomi di tabelle / colonne, allora sì, ma non i comandi stessi.

Così

SELECT * FROM foo;

equivale a

select * from foo;

ma non lo stesso di

select * from FOO;

In SQL Server è un'opzione . Accenderlo fa schifo.

Non sono sicuro di MySql.


Ho trovato questo post del blog molto utile (non sono l'autore). Riepilogando (si prega di leggere, però):

... gli identificatori delimitati sono case sensitive ("table_name"! = "Table_Name"), mentre gli identificatori non quotati non lo sono e vengono trasformati in maiuscolo (table_name => TABLE_NAME).

Ha trovato DB2, Oracle e Interbase / Firebird sono al 100% conformi:

PostgreSQL ... mette in minuscolo ogni identificatore non quotato, invece di sovrascriverlo. MySQL ... dipendente dal file system. SQLite e SQL Server ... i casi dei nomi di tabelle e campi vengono mantenuti durante la creazione, ma in seguito vengono completamente ignorati.


Le parole chiave SQL non fanno distinzione tra maiuscole e minuscole ( SELECT , FROM , WHERE , ecc.), Ma sono spesso scritte in maiuscolo. Tuttavia, in alcune configurazioni, la tabella e i nomi delle colonne sono sensibili al maiuscolo / minuscolo. MySQL ha un'opzione di configurazione per abilitarlo / disabilitarlo. Solitamente i nomi delle tabelle e delle colonne con distinzione tra maiuscole e minuscole sono predefiniti su Linux MySQL e l'insensibilità alle maiuscole e minuscole era l'impostazione predefinita su Windows, ma ora l'installer ha chiesto questo durante l'installazione. Per MSSQL è una funzione delle impostazioni di confronto del database.

Ecco la pagina MySQL su name case-sensitivity

Ecco l' articolo in MSDN sulle regole di confronto per MSSQL


Le parole chiave SQL sono case insensitive.

I nomi di tabelle, colonne, ecc. Hanno una distinzione tra maiuscole e minuscole dipendente dal database - si dovrebbe presumere che siano case sensitive a meno che non si sappia diversamente (in molti database non lo sono, in MySQL i nomi delle tabelle sono SOMETIMES case sensitive ma molti altri i nomi non lo sono).

Il confronto dei dati usando =,>, <etc, ha una consapevolezza del caso che dipende dalle impostazioni di confronto che sono in uso sul singolo database, tabella o colonna in questione. È normale tuttavia, per mantenere le regole di confronto abbastanza coerenti all'interno di un database. Abbiamo alcune colonne che hanno bisogno di memorizzare i valori case-sensitive; hanno una collazione specificatamente impostata.





case-sensitive