2012-05-04 38 views
10

特殊字符我創建了一個表,如下所示:在MySQL表名

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中的一個特殊字符。我試圖逃避它,但查詢仍然失敗。

那麼,我可以在表名中使用特殊字符如!&嗎?如果是,那麼我可能必須以某種方式對它們進行編碼?

謝謝。

回答

16

報價與反勾你的曖昧或「特殊」的表名:

INSERT INTO `e!` ... 

或者更好,不要使用特殊字符表名,以避免此類問題。

+0

@ peasant13337:exazactly正確答案giben re。 :D –

+0

這工作,謝謝。 – peasant13337

10

根據該文件,你不能:

標識符在內部轉換爲Unicode。它們可能包含 這些字符:

  • 在不帶引號的標識符允許的字符: ASCII:0-9,AZ,AZ $ _](基本拉丁字母,數字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

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 
0

你需要圍繞電子背蜱!

此外,您的datetime需要默認值,以解析爲datetime

1

如果您對錶標識符有任何特殊要求,那意味着您的數據庫體系結構和/或理解數據庫體系結構有問題。

你最好的,而不是強制執行傻標識符

+0

我絕對同意最好不要在表名中使用奇數標識符,我知道我可以很容易地將特殊映射到另一個有效的字符串。 – peasant13337

+0

LOL @ peasant13337你沒有明白。不管是不是僞裝的,他們都不需要*。你只是不明白這些標識符的用途 –

-1

這是Object Names 標準的MySQL更好地糾正這些錯誤的架構。據它,你不能使用「!」符號作爲表名的一部分。

+1

[「任何字符在數據庫或表標識符中是合法的,除了ASCII NUL(X'00')」](https://dev.mysql.com/doc/refman/5.5 /en/identifier-mapping.html) –