【问题标题】:Mysql Create Database with special characters in the nameMysql创建名称中带有特殊字符的数据库
【发布时间】:2010-10-29 20:50:57
【问题描述】:

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

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

【问题讨论】:

    标签: mysql special-characters


    【解决方案1】:

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

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

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

    mysql> create database `really@strange*database$name`;
    

    【讨论】:

    • 我想动态创建它,我可以这样做吗?例如 - 我想为变量集提供数据库名称 @a = name.surname;创建数据库@a;
    • 非常感谢安德烈。这是一个很大的帮助,因为我需要它,虽然它是不可取的。谢谢:)
    • 为什么有些服务器允许我在表名中使用\?
    • 为什么说这些`“/”、“\”、“.”`是不允许的? create database backtick:backtick 有效.. 只有最后的空间是一个问题。事实上,mysql并没有在磁盘上创建物理文件:,它会适当地更改名称。
    • @nawfal,我是从文档中引用的。如果您点击“限制”链接,您会看到它列在那里。如果您实际上可以创建这样的表,我不确定为什么在文档中提到它。
    【解决方案2】:

    简单:不要。

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

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

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

    【讨论】:

      【解决方案3】:

      简答:

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

      长答案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-07
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 2016-02-03
        • 2012-05-01
        • 2018-03-09
        相关资源
        最近更新 更多