backticks"`"字元括起的字元序列稱之為 標誌符。
- 如果ansi_quotes模式開啟,可以使用雙引號"""括起的字元序列表示標誌符
- 標誌符可以使用的字元可以是任一字元,當然還是只使用[0-9a-zA-Z_$]這些非特殊字元的好,而且推薦不要以數字或美元開頭——大多數系統都是這樣子的
- 另外標誌符如果是關鍵字(通常等於 保留字)必須括起來
- 嚴重推薦標誌符不要是"{m}e[n]"這種可能和科學計數法相混淆的形式!
- 標誌符不能含有ascii的nul(0x00)、\、/、.、nul、prn 等os中不允許的字元
標誌符最大字元長度為64
標誌符的限定:
- [db_name.][tb_name.]col_name --mysql的標準
- [.]tb_name --相容odbc的限定
標誌符的大小寫敏感性:他是依賴於os的:windows上不區分,linux上區分
- database、table、trigger、alias 是依賴os的。但在同一個語句中,必須完全相同
- column、index、procedure、funcion、envent總是不區分的
- 0:區分大小。存、找、比較。對於myisam儲存引擎可能在某些大小不敏感的os上引起index使用問題
- 1:小寫。存、找、比較。 --推薦
- 2:區分大小寫進行os儲存;按小寫尋找、比較。但是innodb儲存引擎類的表卻與"1"的行為相同
對於函數名稱的解析規則:一句話(好的編程風格:不是和系統已有的東西重名!!!)
- 通常函數分為:native內建、udf函數、stored functions。
- 對於native函數有預設的解析規則,但和ignore_space伺服器的配置有關
- 通常規則:如果內建函數後面是否具有express上下文,是則作為函數調用,否則就認為是標誌符,適用於大多數函數。
- 特殊規則:看函數名後是否僅僅跟著”(“,是作為函數調用,否作為標誌符使用。這些函數可以通過sql_functions()查看
ignore_space:
- disabled:只要是sql_functions()裡列出的函數——將忽略上面的“預設規則”,只要後面緊跟著”(“就認為是函數調用,可能會造成非運算式環境出錯
- enabled:(預設) 只要是sql_functions()裡列出的函數,必須是顯示的括起函數名作為標誌符