Special Characters in MySQL Table Name

后端 未结 7 1748
一向
一向 2020-11-29 11:05

I created a table as follows:

CREATE TABLE IF NOT EXISTS \'e!\' (
`aa` int(11) unsigned NOT NULL auto_increment,
`showName` TEXT NOT NULL default \'\',
`star         


        
相关标签:
7条回答
  • 2020-11-29 11:48

    According to the docs, you can't:

    Identifiers are converted to Unicode internally. They may contain these characters:

    • Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore) Extended: U+0080 .. U+FFFF

    • Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000: ASCII: U+0001 .. U+007F Extended: U+0080 .. U+FFFF

    Source: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

    0 讨论(0)
  • 2020-11-29 11:49

    Permitted characters in unquoted identifiers:

    ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)

    Extended: U+0080 .. U+FFFF

    Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000:

    ASCII: U+0001 .. U+007F

    Extended: U+0080 .. U+FFFF

    ASCII NUL (U+0000) and supplementary characters (U+10000 and higher) are not permitted in quoted or unquoted identifiers.

    Identifiers may begin with a digit but unless quoted may not consist solely of digits.

    Database, table, and column names cannot end with space characters.

    Source: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

    0 讨论(0)
  • 2020-11-29 11:50

    Quote your ambiguous or "special" table names with a back tick:

    INSERT INTO `e!` ...
    

    Or better, don't use special characters in table names to avoid such problems.

    0 讨论(0)
  • 2020-11-29 11:53

    Try with this:

        CREATE TABLE IF NOT EXISTS `e!` (
    `aa` int(11) unsigned NOT NULL auto_increment,
    `showName` TEXT NOT NULL default '',
    `startDateTime` DATETIME NOT NULL ,
    `endDateTime` DATETIME NOT NULL ,
    PRIMARY KEY  (`aa`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8
    
    0 讨论(0)
  • 2020-11-29 11:53

    This is Object Names standards for MySQL. According it you can't use "!" symbol as part of table name.

    0 讨论(0)
  • 2020-11-29 11:55

    If you have whatever special requirements for the table identifiers, that means there is something wrong with your database architecture and/or with understanding database architecture.

    You'd better correct these architectural mistakes instead of enforcing silly identifiers

    0 讨论(0)
提交回复
热议问题