我创建了一个表,如下所示:
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中的一个特殊字符。我试图逃避它,但查询仍然失败。
那么,我能有像这样的特殊角色吗 !
或者 &
在表名中?如果是的话,那么我可能需要对它们进行编码?
谢谢。
7条答案
按热度按时间6vl6ewon1#
你需要在e周围有背虱!
还有,你的
datetime
s需要解析为datetime
.whlutmcx2#
非引号标识符中允许的字符:
ascii:[0-9,a-z,a-z$](基本拉丁字母,数字0-9,美元,下划线)
扩展:u+0080。。u+ffff型
带引号的标识符中允许的字符包括完整的unicode基本多语言平面(bmp),u+0000除外:
ascii:u+0001。。地面+007f
扩展:u+0080。。u+ffff型
带引号或不带引号的标识符中不允许使用ascii nul(u+0000)和补充字符(u+10000及更高)。
标识符可以以数字开头,但除非引用,否则不能仅由数字组成。
数据库、表和列名不能以空格字符结尾。
资料来源:https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
4nkexdtk3#
如果您对表标识符有任何特殊要求,那就意味着您的数据库体系结构和/或对数据库体系结构的理解有问题。
你最好纠正这些架构错误,而不是强制执行愚蠢的标识符
eaf3rand4#
这是mysql的对象名标准。根据它你不能用“!”符号作为表名的一部分。
lymnna715#
试试这个:
hwazgwia6#
根据文件,你不能:
标识符在内部转换为unicode。它们可能包含以下字符:
非引号标识符中允许的字符: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型
资料来源:http://dev.mysql.com/doc/refman/5.5/en/identifiers.html
smtd7mpg7#
在表名后面加上一个勾号,表示您的表名不明确或“特殊”:
或者更好,不要在表名中使用特殊字符来避免此类问题。