MySQL是否允许使用点创建数据库?

GrZ*_*eCh 25 mysql database naming-conventions

MySQL是否允许创建.名称中包含dot()的数据库?

我正在使用MySQL 5.1.22.

nic*_*ckf 37

您不能在数据库名称中使用点.另外,我会避免在任何标识符中使用它.常见的惯例是使用下划线.它将起到同样的作用,并避免很多混乱.如果你这样做有一个很好的理由在表或字段名称中使用奇怪否则,非法字符,那么你必须要逃避它.

要转义MySQL中的标识符,请使用反引号:

SELECT `select`, `some.field name`, `crazy()naming+here`
FROM `my-=+table`
Run Code Online (Sandbox Code Playgroud)

在我看来,不管你是否需要,都要养成反对所有字段名称的习惯,但这是另一个故事.

  • 我强烈反对回击是好的做法.MySQL具体.除非必须这样做,否则不要这样做.列名应该(imho)是纯^ [a-z0-9 _] + $,而不是与保留字冲突.postgres等效的是"奇怪的列名"(保留大小写,空格,允许保留的单词等). (4认同)
  • @ user37607,一些信息为什么反拨是不好的做法会很棒! (2认同)
  • @Sam,就像他说的那样,它特定于MySQL,这意味着如果你需要切换到不同的数据库供应商,你必须更新所有的SQL.您可以使用ANSI_QUOTES标志更改MySQL转义字符,使其符合ANSI标准:http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_ansi_quotes (2认同)
  • 只是我讨厌看到不必要的反引号吗?他们很难看.如果你需要它们,一些东西应该是错的(这是不使用它们的另一个原因). (2认同)

Dav*_*ebb 26

您可以根据文档使用.MySQL 5.1.6中的名称.

但是,正如已经说过并将再次说的那样,不要这样做.对于您认为现在正在解决的每个问题,您将创建五个以后会咬你的问题.自从.用于限定名称 - 例如,database.table或者table.column您每次使用时都必须引用数据库名称.*

你可以用反引号做到这一点:

CREATE TABLE `do.not.do.this` (col INT);
Run Code Online (Sandbox Code Playgroud)

如果设置以下选项,请使用双引号:

SET sql_mode='ANSI_QUOTES';
CREATE TABLE "asking.for.problems" (col INT);
Run Code Online (Sandbox Code Playgroud)

*不严格如此-你要引用这不是字母数字或任何字符_$,但.拥有你的名字是一个特别麻烦的选择.

  • 为'do.not.do.this'和'ask.for.problems'代替+1 ...只是美丽. (3认同)

Ste*_*rig 7

MySQL的5.1.6之前,数据库和表名不能包含/,\,.,或者未在文件名中允许的字符(见8.2架构对象名称).在5.1.6之后的版本中,你必须使用反引号(`)引用你的tablename - 但正如其他人也建议:你不应该这样做以防止任何不必要的麻烦.