1. 程式人生 > >欄位名為mysql保留字的表的插入問題

欄位名為mysql保留字的表的插入問題

嘗試使用一個識別符,例如使用嵌入式MySQL資料型別或函式名作為表名或列名,例如TIMESTAMP或GROUP,會造成一個常見問題。允許你這樣操作(例如,ABS可以作為一個列名)。但是,預設情況下,在數呼叫中在函式名和後面的‘(’字元之間不允許有空格。該要求使函式呼叫與列名引用不同。
該行為的不利結果是在某些上下文中省略一個空格會使識別符解釋為函式名。例如,該語句合法:
mysql> CREATE TABLE abs (val INT);但省略abs後面的空格會造成語法錯誤,因為省略後該語句好像要呼叫ABS()函式:
mysql> CREATE TABLE abs(val INT);如果SQL伺服器模式包括IGNORE_SPACE模式值,伺服器允許函式呼叫時在函式名和後面的‘(’字元之間有空格。這樣使函式名被視為保留字。結果是,與函式名相同的識別符必須按照
9.2節,“資料庫、表、索引、列和別名”
中所描述的引起來。SQL伺服器模式按照5.3.2節,“SQL伺服器模式”中所描述的進行控制。
限定名中句點後面的字必須為一個識別符,因此不需要將它引起來,即使它是一個保留字。
在MySQL中,下表中的字顯式被保留。其中大多數字進位制被標準SQL用作列名和/或表名(例如,GROUP)。少數被保留了,因為MySQL需要它們,(目前)使用yacc解析程式