2009-05-29 126 views

回答

26

我强烈建议您不要使用这些名称创建数据库。但是,如果你绝对必须,这里有restrictions

  • 没有标识符可以包含ASCII NUL(0x00),或是用255
  • 数据库,表和列名的值不应与空间结束字节字符。
  • 数据库和表名不能包含“/”,“\”,“。”或文件名中不允许的字符。

要创建一个数据库,你可以做到以下几点:

mysql> create database `[email protected]*database$name`; 
+0

我想动态创建它,我可以这样做吗?例如 - 我想给一个变量的数据库名称 set @a = name.surname; create database @a; – 2009-05-29 12:45:29

+0

非常感谢安德烈。这是一个很大的帮助,因为我需要它,尽管这是不可取的。谢谢:) – 2009-05-29 13:17:54

3

简单:不要。

可以使用反引号在mysql中逃脱异国情调的表名,但我不知道是否可以使用任何反引号包围。在软件生命周期的其余部分,它会带来很大的痛苦。

我宁愿建议创建另一个表来保存这些奇异的名字。

-- Example: 
CREATE TABLE _DatabaseMetadata (
    databaseName VARCHAR(255), 
    exoticName VARCHAR(255) 
) DEFAULT CHARSET=utf8; 
1

简短的回答:

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

龙答:

  • 您可以命名您的列,表键,外键,视图,甚至数据库利用外来字符,但机会是你会在将来后悔。
  • 如果你坚持这样做,你需要在反引号(`)中引用你的标识符。
  • 如果你的标识必须包含另一个`内,您可以逃避它,说明它的两倍(如外来`名称 - > `异国` `名`)
  • 对于事情并非如此简单,如果你在你的数据库名称中使用外来的(甚至是非常规的)字符(包括简单的空格),那些字符(据我所知,除az,AZ,0-9和_之外的所有内容)都会被转换成4位十六进制四字节通过@逃脱,例如`我的数据库`成为我的@ 0020数据库。该表格被用作存储你的数据库/表格的目录/文件的名称,例如information_schema.INNODB_SYS_FOREIGN中的项目还可能非常依赖操作系统(也就是说,理论上,您可能想要运行SHOW VARIABLES LIKE 'version_compile_os'以适应它)。你看 - 用奇特的名字,它会变得更加复杂,最终它并不值得。