19

我想创建一个名称中包含特殊字符的数据库。例如,(., - , _, @, #, $, %, &, *)

任何人都可以提供任何输出吗?

4

3 回答 3

36

我强烈建议您不要创建具有此类名称的数据库。但如果你绝对必须,这里有一些限制

  • 任何标识符都不能包含 ASCII NUL (0x00) 或值为 255 的字节。
  • 数据库、表和列名不应以空格字符结尾。
  • 数据库和表名不能包含“/”、“\”、“.”或文件名中不允许的字符。

要创建数据库,您可以执行以下操作:

mysql> create database `really@strange*database$name`;
于 2009-05-29T12:26:06.710 回答
3

很简单:不要。

可以使用 mysql 中的反引号来转义奇异的表名,但我不知道您是否可以在反引号内使用任何内容。在您的软件生命周期的其余部分中,它将给您带来极大的痛苦。

我宁愿建议创建另一个表来保存那些异国情调的名字。

-- Example:
CREATE TABLE _DatabaseMetadata (
    databaseName VARCHAR(255),
    exoticName VARCHAR(255)
) DEFAULT CHARSET=utf8;
于 2009-05-29T12:27:45.880 回答
1

简短的回答:

  • 不。我强烈建议保留由 AZ、az、0-9 和 _ 字符组成的所有标识符。您可以将您的“异国情调”名称存储在列或评论中。

长答案:

  • 您可以使用外来字符命名列、表、键、外键、视图,甚至数据库,但您将来可能会后悔。
  • 如果您坚持这样做,您将需要在反引号 (`) 中引用您的标识符。
  • 如果你的标识符必须在里面包含另一个`,你可以将它转义两次(例如exotic`name --> `exotic`name`)
  • 为了让事情变得不那么简单,如果您在数据库名称中使用异国(甚至非常规)字符(包括一个简单的空格),这些字符(据我所知,除 az,AZ,0-9 之外的所有字符)和 _) 转义为用 @ 转义的 4 位十六进制四元组,例如,“我的数据库”变为 my@0020 数据库。此表单用作存储您的数据库/表的目录/文件的名称,例如 information_schema.INNODB_SYS_FOREIGN 中的项目,而且很可能依赖于操作系统(这意味着,理论上,您可能希望运行SHOW VARIABLES LIKE 'version_compile_os'以适应它)。你看 - 有了异国情调的名字,这一切都变得更加复杂,最终它并不值得。
于 2014-12-15T23:12:31.140 回答