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?
Réponses:
"
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.
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:
SELECT `column`, `column2` FROM `table`
Pour MS SQL, utilisez [et]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
Pour utilisation DBASE / DBF [
et]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
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!
'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.