6
votes

Nom de la colonne de base de données H2 "Groupe" est un mot réservé

Comment créer une table dans H2 avec une colonne nommée groupe? J'ai vu un exemple qui a utilisé quelque chose comme [*] il y a un moment, mais je ne peux pas sembler le trouver.


1 commentaires

J'ai essayé avec quelques bases de données (PostgreSQL, MySQL, SQLite, Apache Derby, HSQLDB). Tous d'entre eux rejeter des colonnes nommées groupe .


3 Réponses :


8
votes

Vous devez entourer le nom de colonne de mots réservé dans des guillemets, comme

"groupe"

Source (lien direct): h2database.com

Mots-clés / mots réservés

Il existe une liste de mots-clés qui ne peuvent pas être utilisés comme identifiants (table noms, noms de colonne, etc.), à moins qu'ils ne soient cités (entouré avec des devis doubles). La liste est actuellement:

croix, courant_date, courant_time, courant_timestamp, distinct, Sauf, existez, faux, pour, de, plein, groupe , ayant, intérieur, Intersect, est, rejoindre, comme, limite, moins, naturel, pas, null, on, Ordre, primaire, rownum, sélectionner, sysdate, systtime, systême, aujourd'hui, Vrai, union, unique, où

Certains mots de cette liste sont des mots-clés car ils sont des fonctions qui peut être utilisé sans '()' pour la compatibilité, par exemple Current_Timestamp.


2 commentaires

Ne faites pas cela ... s'il vous plaît. Vous vous ferez mal à la fin; Appelez-le simplement quelque chose qui n'est pas un mot réservé.


Comme @ben l'a suggéré, ce n'est pas une bonne idée d'utiliser des mots réservés. Vous pouvez toujours pré-corriger ou suffixer le nom de la colonne pour le rendre non réservé. Parfois, si je ne peux tout simplement pas préfixer ou suffixer un nom de colonne, je viens d'utiliser "le". Comme "TheGroup". Mais plus souvent que non, vous pouvez trouver un préfixe logique ou un suffixe, comme "groupe groupe" ou "Authorist" (utilisez le nom représentant le groupe pour le préfixer.).



11
votes

Souligne en arrière

Ajouter un SADERSCORE DE FRAIS : Groupe _

La spécification SQL explicitement promet qu'aucun mot clé n'aura jamais un soulignement de fuite. Donc, vous êtes assuré que tout nommage que vous créez avec un soulignement de fuite ne collide jamais avec un mot-clé ou un mot réservé.

Je nomme toutes mes colonnes, contraintes, etc. dans la base de données avec un soulignement de fin. Cela semble un peu bizarre au début, mais vous vous habituez à le voir. S'avère avoir un effet secondaire agréable: dans toute la programmation ainsi que les notes et les courriels, lorsque je vois le soulignement de fin, je sais que le contexte est la base de données par opposition à une variable de programmation ou à un terme d'entreprise.

Un autre avantage est la tranquillité d'esprit. Un tel soulagement pour éliminer une classe entière de bugs possibles et des problèmes étranges en raison de la collision de mots-clés. Si vous pensez, "Aucun gros problème - Quels sont quelques mots clés SQL pour mémoriser et éviter", repensez-y à nouveau. Il y a Zillion Mots-clés et mots réservés , un zillion étant plus de mille.

La réponse de Shiva est également correcte: ajout de citations autour du nom, "groupe" , résout le problème. L'inconvénient est que se souvenir d'ajouter ces citations sera fastidieuse et gênante.

Conseil supplémentaire: pour une compatibilité maximale sur diverses bases de données SQL, faites votre nommée en minuscules. La spécification SQL indique que tous les noms doivent être stockés en majuscule tout en tolérant minuscule. Mais malheureusement, certaines bases de données (la plupart?) Ne suivent pas les spécifications à cet égard. Après des heures d'étude de diverses bases de données, j'ai conclu que toutes les minuscules vous donnent une portabilité maximale.

Donc, je vous suggère de nommer votre colonne: groupe _

Noms de mots multiples ressemblent à ceci: donné_name _ et date_of_first_contact _

Je ne peux pas citer la spécification SQL car il est copyright protégé, malheureusement. Dans le SQL: 2011 SPEC, LIRE SECTION 5.4 Noms et identificateurs Sous la rubrique Règles de syntaxe point 3, note 111. Dans SQL -92 Voir la section 5.2, point 11. Juste la recherche du mot Underscore fonctionnera.


4 commentaires

Vous pouvez citer des travaux protégés par le droit d'auteur; L'utilisation équitable vous permet de citer des pièces insuffistantes tant que vous indiquez l'origine du travail et ne copiez pas les montants «substantiels» ...


@Ben je n'emploie pas de personnel d'avocats. ANSI et ISO font probablement.


La spécification SQL explicitement promet explicitement † qu'aucun mot clé n'aura jamais un soulignement de fuite. <- C'est très important. Mais pourquoi dites-vous aussi à propos de de soulignement principal ? Je veux dire que tout nommant que vous créez avec un soulignement de direction ou de fin de course>.


@Pavel_k je ne sais pas pourquoi j'ai écrit "leader ou la traînée" là-bas. Je l'ai corrigé, supprimant le "leader ou". Les brouillons disponibles au public des spécifications SQL que j'ai vus n'ont été promis uniquement pour éviter Trailing Un soulignement dans les identifiants / noms. Merci d'avoir souligné cela.



4
votes

J'ai eu ce problème avec SQL généré par JPA ... La classe avait un champ appelé limite.

Le correctif consiste à spécifier le nom de la colonne comme xxx


0 commentaires