maiuscole La sintassi SQL è sensibile al maiuscolo/minuscolo?



maiuscola lettera (8)

La mia comprensione è che lo standard SQL richiede insensibilità alle maiuscole e minuscole. Non credo che nessun database segua completamente lo standard, comunque.

MySQL ha un'impostazione di configurazione come parte della sua "modalità rigorosa" (un sacco di diverse impostazioni che rendono MySQL più conforme agli standard) per i nomi delle tabelle sensibili al maiuscolo o minuscolo. Indipendentemente da questa impostazione, i nomi delle colonne sono ancora insensibili alle maiuscole e minuscole, anche se penso che influenzi il modo in cui vengono visualizzati i nomi delle colonne. Credo che questa impostazione sia estesa a tutta l'istanza, su tutti i database all'interno dell'istanza RDBMS, sebbene io stia facendo ricerche oggi per confermare questo (e sperando che la risposta sia no).

Mi piace come Oracle gestisce meglio questo. In SQL diritta, gli identificativi come i nomi di tabelle e colonne non fanno distinzione tra maiuscole e minuscole. Tuttavia, se per qualche motivo desideri davvero ottenere un involucro esplicito, puoi racchiudere l'identificatore tra virgolette (che sono abbastanza diverse in Oracle SQL dalle virgolette singole utilizzate per racchiudere i dati di stringa). Così:

SELECT fieldName
FROM tableName;

interrogherà fieldname da tablename , ma

SELECT "fieldName"
FROM "tableName";

interrogherà fieldName da tableName .

Sono abbastanza sicuro che potresti persino usare questo meccanismo per inserire spazi o altri caratteri non standard in un identificatore.

In questa situazione, se per qualche motivo hai trovato desiderabili i nomi delle tabelle e delle colonne espressamente castrati, era a tua disposizione, ma era ancora qualcosa a cui vorrei essere molto cauto.

La mia convenzione quando usavo Oracle quotidianamente era che nel codice avrei messo tutte le parole chiave Oracle SQL in maiuscolo e tutti gli identificatori in minuscolo. Nella documentazione avrei messo tutti i nomi di tabelle e colonne in maiuscolo. È stato molto comodo e leggibile poterlo fare (anche se a volte è difficile scrivere tante lettere maiuscole nel codice - sono sicuro che avrei potuto trovare una funzione di editor per aiutare, qui).

Secondo me, MySQL è particolarmente negativo per differenze su questo su piattaforme diverse. Dobbiamo essere in grado di scaricare database su Windows e caricarli in UNIX, e fare così è un disastro se il programma di installazione su Windows ha dimenticato di mettere l'RDBMS in modalità case-sensitive. (Per essere onesti, parte del motivo per cui questo è un disastro è che i nostri programmatori hanno preso la cattiva decisione, molto tempo fa, di affidarsi alla case-sensitive di MySQL su UNIX.) Le persone che hanno scritto il programma di installazione di Windows MySQL lo hanno reso molto comodo e Simile a Windows, ed è stato fantastico passare a dare alle persone una casella di controllo per dire "Vorresti attivare la modalità rigorosa e rendere MySQL più conforme agli standard?" Ma è molto conveniente per MySQL differire in modo così significativo dallo standard, e quindi peggiorare le cose girando e differenziandosi dal suo standard di fatto su piattaforme diverse. Sono sicuro che su diverse distribuzioni Linux questo potrebbe essere ulteriormente aggravato, dato che i packer per diverse distribuzioni hanno a volte incorporato le proprie impostazioni di configurazione MySQL preferite.

Here un'altra domanda SO che entra in discussione se la sensibilità alle maiuscole e minuscole è auspicabile in un RDBMS.

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


Answer #1

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


Answer #2

Non penso che SQL Server sia sensibile al maiuscolo / minuscolo, almeno non di default.

Quando sto interrogando manualmente tramite Management Studio, rovino tutto il tempo e lo accetto allegramente:

select cOL1, col2 FrOM taBLeName WheRE ...

Answer #3

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


Answer #4

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;

Answer #5

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.


Answer #6

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.


Answer #7

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