Existe-t-il un standard SQL pour échapper un nom de colonne? Sinon, qu'est-ce qui fonctionne pour MySQL et SQLite? ça marche aussi pour SQL Server?
98
"
Le SQL: 1999 norme spécifie que guillemet ( ") ( GUILLEMET ) est utilisé pour délimiter les identificateurs.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL et SQlite prennent tous en charge "
le délimiteur d'identifiant.
Ils ne sont pas tous utilisés "
par défaut. Par exemple, vous devez être en cours d' exécution MySQL en mode ANSI et SQL Server ne prend en charge quand QUOTED_IDENTIFIER
est ON
.
Selon SQLite ,
'foo'
est une chaîne SQL"foo"
est un identifiant SQL (colonne / table / etc)[foo]
est un identifiant dans MS SQL`foo`
est un identifiant dans MySQLPour les noms qualifiés, la syntaxe est: "t"."foo"
ou [t].[foo]
, etc.
MySQL prend en charge le standard "foo" lorsque l' ANSI_QUOTES
option est activée.
'foo'
d'être interprété comme un identifiant si le contexte n'autorise pas une chaîne, et"foo"
d'être interprété comme une chaîne si le contexte ne permet pas un identifiant, bien qu'il y ait une note que ce comportement peut être supprimé à l'avenir versions.WHERE "nonexistent_column" = 0
et sqlite l'a simplement exécuté avec bonheur en prétendant que j'étais"nonexistent_column"
une corde. Qualifier complètement le nom comme"my_table"."nonexistent_column"
obligeant sqlite à se comporter de manière plus stricte.foo
,"foo"
et'foo'
n'a pas fonctionné pour moi avec MySQL. Cela nécessitait des backticks. Et pour aggraver les choses, MySQL fournissait des messages d'erreur inutiles .Pour MySQL, utilisez les graduations inverses `.
Par exemple:
la source
Pour MS SQL, utilisez [et]
la source
Pour utilisation DBASE / DBF
[
et]
la source
Rassembler quelques réponses:
MS SQL (alias 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"
Veuillez ajouter / modifier!
la source