Bir sütun adından kaçmak için bir SQL standardı var mı? MySQL ve SQLite için ne işe yaramazsa? SQL Server için de çalışıyor mu?
Yanıtlar:
"SQL: 1999 standardı belirtir çift tırnak ( ") (yani TEKLİFİ İŞARETİ ) sınırlandırmaktadır tanımlayıcılar için kullanılır.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL ve SQlite ", tanımlayıcı sınırlayıcı olarak destekler .
Hepsi "'varsayılan' olarak kullanılmıyor. Örneğin, MySQL çalışıyor olması gerekmektedir ANSI modunda ve SQL Server, yalnızca onu destekleyen QUOTED_IDENTIFIERolduğunu ON.
SQLite'ye göre ,
'foo' bir SQL dizesidir"foo" bir SQL tanımlayıcısıdır (sütun / tablo / vb.)[foo] MS SQL'de bir tanımlayıcıdır`foo` MySQL'deki bir tanımlayıcıdırNitelikli adlar için sözdizimi: "t"."foo"veya [t].[foo], vb.
MySQL, ANSI_QUOTESseçenek etkinleştirildiğinde standart "foo" yu destekler .
WHERE "nonexistent_column" = 0ve sqlite, benim "nonexistent_column"bir dizeymiş gibi mutlu bir şekilde yürüttü . İsmi "my_table"."nonexistent_column"tam anlamıyla sqlite olarak nitelendirmek, daha katı davranmaya zorlar.
foo, "foo"Ve 'foo'MySQL ile benim için işe yaramadı. Ters vuruşlar gerekiyordu. Ve daha da kötüsü, MySQL gereksiz hata mesajları veriyordu .
MySQL için geri tikleri kullanın ".
Örneğin:
SELECT `column`, `column2` FROM `table`
MS SQL için [ve]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
DBASE / DBF kullanımı için [ve]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
Bazı cevapları bir araya getirmek:
MS SQL (diğer adıyla T-SQL), Microsoft Access SQL, DBASE / DBF: SELECT [COLUMN], [COLUMN2] FROM [TABLE]
MySQL: SELECT `COLUMN`, `COLUMN2` FROM `TABLE`
SQLite, Oracle, Postgresql: SELECT "COLUMN", "COLUMN2" FROM "TABLE"
Lütfen ekleyin / düzenleyin!
'foo', bağlam bir dizeye izin vermiyorsa bir tanımlayıcı olarak yorumlanmasına ve bağlam bir tanımlayıcıya izin vermiyorsa bir dize"foo"olarak yorumlanmasına izin verir, ancak bu davranışın gelecekte kaldırılabileceğine dair bir not vardır. sürümler.