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中的一个特殊字符。我试图逃避它,但查询仍然失败
那么,我可以有像这样的特殊字符吗表名中的code>或&
?如果是的话,那么我可能必须以某种方式对它们进行编码
谢谢。根据文档,您不能:
标识符在内部转换为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你没有领会要点。无论伪装与否,它们都应该没有必要。你只是不明白这些标识符的用途