MariaDB / Comment utiliser les traits d'union et les points dans les noms de bases de données

Dans MariaDB, pour créer une base de données avec un nom contenant un trait d'union (-) ou un point (.), encadrez le nom entier avec des accents graves (`). Par exemple, écrivez-le comme CREATE DATABASE `test-test`; et CREATE DATABASE `test.test`;.

Pourquoi les accents graves sont-ils nécessaires ?

Un nom de base de données est un identifiant utilisé par MariaDB pour distinguer les objets. Sans les accents graves, MariaDB n'interprète pas le tiret dans test-test comme faisant partie du nom, et le point dans test.test peut être interprété comme un séparateur entre les identifiants. Par conséquent, aucune des déclarations suivantes n'est une syntaxe valide pour créer la base de données souhaitée.

CREATE DATABASE test-test;
CREATE DATABASE test.test;

Exécuter chaque phrase entraîne une erreur de syntaxe. Les spécificités du message d'erreur peuvent varier selon la version du serveur et le client. Les accents graves sont différents des guillemets simples (') utilisés pour représenter des chaînes de caractères. Les règles pour les identifiants dans MariaDB se trouvent dans Document sur les noms d'identifiants MariaDB.

Créer et vérifier une base de données

L'exemple suivant s'exécute sur un client SQL connecté à un serveur MariaDB. Vous devez avoir l'autorisation de créer une nouvelle base de données, et si une base de données portant le même nom existe déjà, vérifiez son utilisation avant de la créer. La pratique doit être effectuée dans un environnement de test séparé sans données existantes.

CREATE DATABASE `test-test`;
CREATE DATABASE `test.test`;
SHOW DATABASES;

Si la création est réussie, vous pouvez voir les noms dans la liste. La création peut échouer si le nom existe déjà ou s'il y a des permissions insuffisantes. Si vous pouvez rendre le nom simple avec des lettres anglaises, des chiffres et des underscores, vous pouvez l'établir comme test_test pour réduire la confusion avec les guillemets et la compatibilité des outils.

Utilisation des noms avec des points

Lors de la sélection d'une base de données, entourez le nom complet, y compris le point, avec des accents graves. L'exécution des instructions suivantes affiche le nom actuel de la base de données comme test.test.

USE `test.test`;
SELECT DATABASE();

Lors de la spécification à la fois d'une base de données et d'une table, entourez chacun séparément et placez un point de séparation entre eux. Dans l'exemple ci-dessous, le premier point fait partie du nom de la base de données, et le point en dehors des accents graves sépare la base de données et la table.

CREATE TABLE `test.test`.`example` (id INT);
INSERT INTO `test.test`.`example` VALUES (1);
SELECT id FROM `test.test`.`example`;

Si elle est exécutée dans une base de données de pratique vide séparée, la requête finale renvoie 1. Des privilèges pour la création de tables et l'insertion de données sont également nécessaires. En revanche, si vous entourez tout comme une seule paire comme `test.test.example`, cela représente un seul identifiant contenant un point, plutôt que deux identifiants différents.

Points à vérifier pendant l'exploitation

Le fait qu'un nom puisse être encadré par des backticks ne signifie pas que tous les outils gèrent les noms avec des caractères spéciaux de la même manière. Testez séparément si les paramètres de connexion de l'application, les outils de sauvegarde et de restauration, les outils de gestion et les versions du serveur prennent en charge ces noms. Par exemple, la fonctionnalité de catalogue de MariaDB impose des restrictions sur les noms de bases de données contenant des points, selon le client utilisé pour se connecter. Pour des conditions détaillées, consultez la documentation du catalogue MariaDB .

La sensibilité à la casse des noms de base de données est affectée par le système de fichiers du système d'exploitation et les paramètres lower_case_table_names. Ne supposez pas que les noms existants utilisent des majuscules et minuscules différentes ; vérifiez les noms réels. Étant donné que ce paramètre est lié à l'initialisation du serveur, ne le changez pas arbitrairement sur un serveur de production existant à des fins de dépannage.

Après avoir terminé la pratique, vérifiez d'abord le nom et le contenu avant de supprimer la base de données. DROP DATABASE supprime les tables et les données qu'elle contient, donc n'exécutez pas les commandes de suppression de l'exemple sur des bases de données de service réelles. Utilisez les commandes suivantes uniquement dans un environnement vide que vous avez créé à des fins de test.

DROP DATABASE `test-test`;
DROP DATABASE `test.test`;

Les exemples ont été confirmés dans un MariaDB 12.3.3 isolé sur Windows pour la création avec ou sans backticks, la sélection de base de données et les requêtes de table. Dans d'autres versions ou outils de gestion, vérifiez le comportement et les permissions de cet environnement.