sql—mysql表名中的特殊字符

8dtrkrch  于 2021-06-18  发布在  Mysql
关注(0)|答案(7)|浏览(331)

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

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中的一个特殊字符。我试图逃避它,但查询仍然失败。
那么,我能有像这样的特殊角色吗 ! 或者 & 在表名中?如果是的话,那么我可能需要对它们进行编码?
谢谢。

6vl6ewon

6vl6ewon1#

你需要在e周围有背虱!
还有,你的 datetime s需要解析为 datetime .

whlutmcx

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

4nkexdtk

4nkexdtk3#

如果您对表标识符有任何特殊要求,那就意味着您的数据库体系结构和/或对数据库体系结构的理解有问题。
你最好纠正这些架构错误,而不是强制执行愚蠢的标识符

eaf3rand

eaf3rand4#

这是mysql的对象名标准。根据它你不能用“!”符号作为表名的一部分。

lymnna71

lymnna715#

试试这个:

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
hwazgwia

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

smtd7mpg

smtd7mpg7#

在表名后面加上一个勾号,表示您的表名不明确或“特殊”:

INSERT INTO `e!` ...

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

相关问题