2012-03-15 15 views
12

Ho pensato che ci sarebbe stata un'altra domanda al riguardo ma non sono riuscito a trovarne una. In MySQL con PHP di solito incapsula i nomi dei miei campi con i backtick per mascherare qualsiasi nome o carattere riservato. Tuttavia, uno dei miei colleghi ha sottolineato che questo può essere ottenuto anche utilizzando parentesi quadre. Escludendo il fatto che i backtick non sono compatibili con SQL server (apparentemente), qual è la differenza? Quale dovrei usare?Qual è la differenza tra l'apice e la parentesi quadra nelle istruzioni SQL?

SELECT `username` FROM `users` 
SELECT [username] FROM [users] 
+1

Le parentesi quadre sono compatibili con MySQL? In SQL Server puoi anche usare "se 'QUOTED_IDENTIFIER' è attivo, non so se questo è valido anche in MySQL –

+0

Hai ragione a chiedere, no non sono compatibili. Supponevo che lo fossero! –

+1

Le parentesi sono obbligatorie se usi parole chiave o caratteri speciali nei nomi di colonne o database Anche le parentesi quadre sono il modo di usare una parola riservata come nome di campo (ad esempio [data]) –

risposta

18

SQL Server/T-SQL utilizza parentesi quadre (oltre a MS Access), mentre MySQL utilizza backtick.

Per quanto ne so, può turn up in documentation, o utilizzare in prova, parentesi quadre sono non valido per MySQL. Pertanto, se è necessario racchiudere una parola chiave come nome tabella in SQL Server, utilizzare [] e in MySQL utilizzare apici inversi o virgolette quando è abilitato lo ANSI_QUOTES.

From the documentation:

Il carattere identificativo citazione è l'apice inverso (“`”):

mysql> SELECT * FROM `select` WHERE `select`.id > 100; 

Se la modalità ANSI_QUOTES SQL è abilitata, è anche lecito citare identificatori tra virgolette doppie:

mysql> CREATE TABLE "test" (col INT); 
ERROR 1064: You have an error in your SQL syntax... 
mysql> SET sql_mode='ANSI_QUOTES'; 
mysql> CREATE TABLE "test" (col INT); 
Query OK, 0 rows affected (0.00 sec) 
+2

+1 - '[]' sono praticamente uniche per T-SQL, Non sono sicuro che altri tipi di SQL li accettino .. – MatBailie

+0

Questo è molto interessante, entrambi abbiamo creduto che le parentesi quadre potessero essere usate ovunque: abbiamo appena testato con MySQL e hai ragione!:-) –

+2

Le parentesi quadre in SQL Server vengono utilizzate anche in Microsoft Access, in cui gli spazi incorporati nei nomi di colonne e tabelle sono abbastanza comuni. Hai bisogno di qualcosa che sia abbastanza facile da digitare. Cercare di capire come digitare un apice può essere un omicidio. –

5

Entrambi sono metodi non standard per citare nomi di oggetti che dovrebbero essere maiuscoli o minuscoli, sono una parola riservata o contengono caratteri speciali che non sono consentiti altrimenti.

Il carattere di quotatura standard per tale identificativo è una doppia citazione. Per essere compatibile con ANSI SQL, è necessario utilizzare:

SELECT "username" FROM "users" 

ma nota che citati identificatori sono secondo ANSI SQL maiuscole e minuscole. Comunque entrambi i prodotti menzionati non obbediscono a questo requisito. Se un identificatore di questo tipo fa distinzione tra maiuscole e minuscole o meno dipende da diverse (diverse) impostazioni di configurazione in MySQL e dalle regole di confronto del database in MS SQL Server.

Entrambi i DBMS possono (e secondo me dovrebbero) essere configurati per accettare anche i caratteri di quotatura ANSI standard.

Si consiglia vivamente di evitare qualsiasi nome oggetto che richieda la quotazione. L'uso di identificatori che non richiedono quoting ti farà risparmiare un sacco di problemi a lungo termine.

+0

Evito assolutamente qualsiasi campo o nome di tabella che include nomi riservati o caratteri speciali, tuttavia, mentre sto scrivendo una classe MsSQL che può essere utilizzata da persone con poca esperienza, devo soddisfare per loro. Quindi, ho bisogno di avvolgere ogni campo e tabella con la parentesi quadra per aiutare a prevenire gli errori. Poichè non usa molte più risorse (se ce ne sono), potrei anche implementare esso –

Problemi correlati