MariaDB / 如何在数据库名称中使用连字符和点
在 MariaDB 中,要创建包含连字符(-)或点(.)的数据库名称,请将整个名称用反引号括起来(`)。例如,可以这样写:CREATE DATABASE `test-test`; 和 CREATE DATABASE `test.test`;。
为什么需要使用反引号?
数据库名称是MariaDB用来区分对象的标识符。如果没有反引号,MariaDB不会将test-test中的连字符视为名称的一部分,并且test.test中的点可能会被解释为标识符之间的分隔符。因此,以下任一语句都不是创建所需数据库的有效语法。
CREATE DATABASE test-test;
CREATE DATABASE test.test;
执行每条语句都会导致语法错误。错误信息的具体内容可能取决于服务器版本和客户端。反引号不同于用于表示字符串的单引号(')。MariaDB中标识符的规则可以在MariaDB标识符名称文档中找到。
创建和检查数据库
以下示例将在连接到 MariaDB 服务器的 SQL 客户端上执行。您需要具有创建新数据库的权限,如果已存在同名数据库,请在创建前检查其使用情况。实践应在没有现有数据的单独测试环境中进行。
CREATE DATABASE `test-test`;
CREATE DATABASE `test.test`;
SHOW DATABASES;
如果创建成功,您可以在列表中看到名称。如果名称已存在或权限不足,创建可能会失败。如果您能使用英文字符、数字和下划线使名称简单,则可以像 test_test 一样建立它,以减少与引用和工具兼容性的混淆。
使用带点的名称
在选择数据库时,将整个名称(包括点)用反引号括起来。执行以下语句会显示当前数据库名称为 test.test。
USE `test.test`;
SELECT DATABASE();
在同时指定数据库和表时,分别将它们用反引号括起来,并在它们之间放置一个点作为分隔。在下面的示例中,第一个点是数据库名称的一部分,而反引号外的点用于分隔数据库和表。
CREATE TABLE `test.test`.`example` (id INT);
INSERT INTO `test.test`.`example` VALUES (1);
SELECT id FROM `test.test`.`example`;
如果在一个单独的空练习数据库中执行,最终查询返回 1。还需要有表创建和数据插入权限。相比之下,如果你将所有内容作为一对整体括起来,如 `test.test.example`,它表示包含点的单个标识符,而不是两个不同的标识符。
操作过程中需要检查的要点
仅仅因为名称可以用反引号括起来,并不意味着所有工具都以相同方式处理带有特殊字符的名称。需要单独测试应用程序连接设置、备份和还原工具、管理工具以及服务器版本是否支持这些名称。例如,MariaDB 的目录功能对包含点的数据库名称有使用限制,这取决于用于连接的客户端。有关详细条件,请参阅 MariaDB 目录文档 。
数据库名称的大小写敏感性受操作系统文件系统和 lower_case_table_names 设置的影响。不要假设现有名称使用了不同的大小写;请检查实际名称。由于此设置与服务器初始化相关,请勿在现有的生产服务器上为故障排除目的随意更改。
完成练习后,首先检查名称和内容,然后再删除数据库。DROP DATABASE 会删除其中的表和数据,因此不要在实际服务数据库上执行示例删除命令。请仅在您为测试目的创建的空环境中使用以下命令。
DROP DATABASE `test-test`;
DROP DATABASE `test.test`;
这些示例已在 Windows 上的独立 MariaDB 12.3.3 中确认,可用于创建时是否使用反引号、数据库选择和表查询。在其他版本或管理工具中,请检查该环境的行为和权限。




