2012-03-15 15 views
12

Pensé que habría otra pregunta sobre esto, pero no pude encontrar ninguna. En MySQL con PHP, por lo general, encapsulo mis nombres de campo con marcadores para enmascarar cualquier nombre o carácter reservado. Sin embargo, uno de mis colegas ha señalado que esto también se puede lograr utilizando corchetes. Excluyendo el hecho de que los backticks no son compatibles con SQL Server (aparentemente), ¿cuál es la diferencia? ¿Qué debería usar?¿Cuál es la diferencia entre el backtick y el corchete en las sentencias de SQL?

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

¿Son los corchetes compatibles con MySQL entonces? En SQL Server también puede usar "si' QUOTED_IDENTIFIER' está activado. No sé si eso es válido en MySQL. –

+0

Tiene razón al preguntar, no, no son compatibles. ¡Supuse que sí! –

+1

Los corchetes son obligatorios si usa palabras clave o caracteres especiales en la columna o en los nombres de las bases de datos. También los corchetes son la forma de usar una palabra reservada como nombre de campo (por ejemplo [fecha]) –

Respuesta

18

SQL Server/T-SQL usa corchetes (además de MS Access), mientras que MySQL usa los backticks.

Por lo que yo sé, puede turn up in documentation, o el uso en la prueba, los corchetes son no válido para MySQL. Por lo tanto, si necesita incluir una palabra clave como nombre de tabla en SQL Server, use [], y en MySQL use resúmenes, o comillas dobles cuando ANSI_QUOTES esté habilitado.

From the documentation:

El carácter de comillas identificador es el acento grave (“`”):

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

Si el modo ANSI_QUOTES SQL está habilitada, también es permitido citar identificadores entre comillas dobles:

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 - '[]' son bastante exclusivos de T-SQL, No estoy seguro de que otros sabores de SQL los acepten. – MatBailie

+0

Eso es muy interesante, ambos creímos que los corchetes podrían usarse en cualquier parte. ¡Acabamos de probar con MySQL y tiene razón!:-) –

+2

Los corchetes en SQL Server también se usan en Microsoft Access, donde los espacios incrustados en los nombres de columnas y tablas son bastante comunes. Necesita algo que sea bastante fácil de escribir. Tratar de averiguar cómo escribir un revólver puede ser un asesinato. –

5

Ambas son formas no estándar de citar nombres de objetos que deben ser sensibles a las mayúsculas y minúsculas, son palabras reservadas o contienen caracteres especiales que no están permitidos.

El carácter de comillas estándar para dicho identificador es una comilla doble. Para ser compatible ANSI SQL, debe utilizar ellos:

SELECT "username" FROM "users" 

Pero tenga en cuenta que los citados identificadores entre mayúsculas y minúsculas según ANSI SQL. Sin embargo, ambos productos mencionados no obedecen a este requisito. Si un identificador de este tipo distingue entre mayúsculas y minúsculas o no, depende de varias configuraciones de configuración (diferentes) en MySQL y de la intercalación de la base de datos en MS SQL Server.

Ambos DBMS pueden (y en mi opinión deberían) configurarse para aceptar los caracteres de comillas estándar ANSI también.

Recomiendo encarecidamente evitar cualquier nombre de objeto que requiera citando. El uso de identificadores que no requieren cotización le ahorrará muchos problemas a largo plazo.

+0

Absolutamente evito cualquier nombre de campo o tabla que incluya nombres reservados o caracteres especiales, sin embargo, como estoy escribiendo una clase MsSQL que puede usarse por personas con poca experiencia, debo atenderlos. Por lo tanto, debo envolver cada campo y tabla con el corchete para ayudar a evitar errores. Como no usa muchos más recursos (si los hay), también podría implementar eso –

Cuestiones relacionadas