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总是不区分的
- lower_case_table_names:
- 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()里列出的函数,必须是显示的括起函数名作为标志符