2009-11-30 6 views
2
CREATE TABLE findings (
    ident VARCHAR(28), 
    code VARCHAR(8), 
    when DATETIME, 
    ip VARCHAR(15) 
); 
+0

Ce n'est pas une requête. Une requête est une instruction qui commence par "SELECT". –

+0

Ce n'est pas non plus un DDL. Un DDL est la définition d'une langue, pas une déclaration. – soulmerge

Répondre

6

Le mot quand.

Dans certaines bases de données, il s'agit d'un mot-clé. Ainsi, lors du traitement de votre instruction create table, vous risquez d'obtenir des erreurs de votre système de gestion de base de données.

9

when est un keyword in mysql et doit être cité avec des accents graves:

CREATE TABLE `findings` (
    `ident` VARCHAR(28), 
    `code` VARCHAR(8), 
    `when` DATETIME, 
    `ip` VARCHAR(15) 
); 

EDIT: Il a été signalé correctement dans les commentaires, que ce n'est pas une bonne solution. Vous feriez peut-être mieux de trouver un autre nom pour votre colonne.

+2

Une meilleure solution devrait être de ne jamais utiliser le mot when, même s'il est cité. –

+0

+1 mais les mots-clés qui s'échappent pourraient poser plus de problèmes que cela en vaut la peine. –

+0

Il n'y a rien de mal à citer des identifiants en général. Le seul problème pratique est que pour MySQL vous devez utiliser le caractère backquote, alors que la bonne méthode ANSI SQL est d'utiliser des guillemets doubles comme '" quand "DATETIME'. MySQL peut être configuré pour se conformer à la norme, mais ce n'est pas le cas par défaut. – bobince

1

si vous êtes si désireux d'utiliser quand il suffit de préfixer le nom de la colonne avec _.

+0

Etes-vous sûr que ce n'est pas spécifique au SGBD? –

+0

Je suis sûr que cela fonctionne dans mysql 5.x. Vous pouvez sélectionner, insérer, supprimer, mettre à jour, etc. en utilisant le nom de champ _when. – Kalpak

1

BTW, n'est pas une bonne idée d'utiliser des noms réservés pour les noms de lignes, tables, etc.

Questions connexes