MySQL表名中的特殊字符

MySQL表名中的特殊字符,mysql,sql,Mysql,Sql,我创建了一个表,如下所示: CREATE TABLE IF NOT EXISTS 'e!' ( `aa` int(11) unsigned NOT NULL auto_increment, `showName` TEXT NOT NULL default '', `startDateTime` DATETIME NOT NULL default '', `endDateTime` DATETIME NOT NULL default '', PRIMARY KEY (`aa`) ) ENGINE

我创建了一个表,如下所示:

CREATE TABLE IF NOT EXISTS 'e!' (
`aa` int(11) unsigned NOT NULL auto_increment,
`showName` TEXT NOT NULL default '',
`startDateTime` DATETIME NOT NULL default '',
`endDateTime` DATETIME NOT NULL default '',
PRIMARY KEY  (`aa`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8
然后尝试在查询中插入:

INSERT INTO e! (showname, startDateTime, endDateTime) VALUES('E! News ', '2012-05-03 19:00:00', '2012-05-03 20:00:00')
由于<代码>而导致错误是mysql中的一个特殊字符。我试图逃避它,但查询仍然失败

那么,我可以有像
这样的特殊字符吗
&
?如果是的话,那么我可能必须以某种方式对它们进行编码


谢谢。

根据文档,您不能:

标识符在内部转换为Unicode。它们可能包含 这些字符:

  • 非引号标识符中允许的字符: ASCII:[0-9,a-z,a-z$389;](基本拉丁字母,数字0-9,美元,下划线) 扩展:U+0080。。U+FFFF

  • 带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),U+0000除外: ASCII:U+0001。。U+007F 扩展:U+0080。。U+FFFF

来源:

请在不明确或“特殊”的表格名称后面加上一个勾号:

INSERT INTO `e!` ...
或者更好,不要在表名中使用特殊字符来避免此类问题。

尝试以下方法:

    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

你需要在e的周围有回音


另外,您的
datetime
s需要解析为
datetime
的默认值

如果您对表标识符有任何特殊要求,这意味着您的数据库体系结构和/或理解数据库体系结构有问题

您最好纠正这些体系结构错误,而不是强制使用愚蠢的标识符 MySQL的标准。根据它,您不能使用“!”符号作为表名的一部分

不带引号的标识符中允许的字符:

ASCII:[0-9,a-z,a-z$(基本拉丁字母,数字0-9,美元, 下划线)

扩展:U+0080。。U+FFFF

带引号的标识符中允许的字符包括完整的Unicode 基本多语言平面(BMP),U+0000除外:

ASCII:U+0001。。U+007F

扩展:U+0080。。U+FFFF

ASCII NUL(U+0000)和补充字符(U+10000及以上) 不允许在带引号或不带引号的标识符中使用

标识符可以以数字开头,但除非引用,否则可能不包括 完全由数字组成

数据库、表和列名不能以空格字符结尾


来源:

我完全同意,最好不要在表名中使用奇数标识符,我知道我可以很容易地将特价映射到另一个有效字符串。LOL@peasant13337你没有领会要点。无论伪装与否,它们都应该没有必要。你只是不明白这些标识符的用途