我按如下方式创建了一个表:
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中的特殊字符。我试图逃避它,但查询仍然失败。
那么,我可以在表名中添加!
或&
等特殊字符吗?如果是,那么我可能不得不以某种方式对它们进行编码?
感谢。
答案 0 :(得分:19)
引用您的含糊不清或“特殊”的表名,后面有一个勾号:
INSERT INTO `e!` ...
或者更好的是,不要在表名中使用特殊字符来避免此类问题。
答案 1 :(得分:12)
根据文档,你不能:
标识符在内部转换为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
答案 2 :(得分:4)
试试这个:
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
答案 3 :(得分:1)
如果您对表标识符有任何特殊要求,则表示您的数据库体系结构存在问题和/或了解数据库体系结构。
您最好纠正这些架构错误,而不是强制执行愚蠢的标识符
答案 4 :(得分:0)
你需要在e周围回溯!
此外,您的datetime
需要解析为datetime
的默认值。
答案 5 :(得分:0)
未加引号的标识符中允许的字符:
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及更高版本) 不允许在带引号或不带引号的标识符中使用
。标识符可以以数字开头,但除非引用不包含空格 完全是数字。
数据库,表和列的名称不能以空格字符结尾。
答案 6 :(得分:-1)
这是Object Names MySQL的标准。根据它,你不能使用“!”符号作为表名的一部分。