mysql - porque - ¿Cuál es la diferencia entre el backtick y el corchete en las sentencias de SQL?
sql server express vs mysql (2)
SQL Server / T-SQL usa corchetes (además de MS Access), mientras que MySQL usa los backticks.
Por lo que yo sé, puede aparecer en la documentación o usarse en las pruebas, los corchetes no son válidos para MySQL. Por lo tanto, si necesita incluir una palabra clave como nombre de tabla en SQL Server, use []
, y en MySQL utilice palos de retroceso o comillas dobles cuando ANSI_QUOTES
esté habilitado.
El carácter de cita del identificador es el backtick ("` "):
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
Si el modo SQL ANSI_QUOTES está habilitado, también se permite 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)
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?
SELECT `username` FROM `users`
SELECT [username] FROM [users]
Ambas son formas no estándar de citar nombres de objetos que deberían ser sensibles a las mayúsculas y minúsculas, son palabras reservadas o contienen caracteres especiales que no están permitidos en caso contrario.
El carácter de comillas estándar para dicho identificador es una comilla doble. Para ser ANSI SQL compatible, debe usarlos:
SELECT "username" FROM "users"
Pero tenga en cuenta que los identificadores entre comillas distinguen 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 cotizaciones. El uso de identificadores que no requieren cotización le ahorrará muchos problemas a largo plazo.