MySQL技术内幕第二章(1)
一、服务器的SQL模式
变量:sql_mode(对sql语句的执行产生影响)
几种常见模式:
(1)STRICT_ALL_TABLES 和 STRICT_TRANS_TABLES(严格模式)。
(2)TRADITIONAL是一个组合模式(更加严格模式)。
(3)ANSI也是一个组合模式(更接近标准SQL)。
二、MYSQL的标识符语法和命名规则
标识符是指用于应用某个数据库或其构成元素,如表、视图、列、索引、存储例程、触发器或事件。(就是名字)
(1)标识符里的字符要合法。
不加引号支持:大小写字母,数字,美元符号,下划线,范围在 U+0080到U+FFFF之间的Unicode扩展字符构成。
用反引号引起来的标识符可以包含其它字符
(2)服务器的SQL模式。
(3)标识符的长度。大部分标识符的最大长度是64个字符。别名的最大字符串长度是256个字符。
(4)标识符限定符。(如:db_name.tbl_name)
三、SQL语句的大小写规则
(1)SQL关键字和函数名,不区分大小写。
(2)数据库名、表名和视图名。取决于MySQL服务器的操作系统,Windows系统不区分大小写,Unix区分大小写,所以最好全部统一用小写。
(3)存储程序的名字。过程和函数不区分大小写,触发器区分大小写。
(4)列名和索引名。不区分大小写。
(5)别名的名字。lower_case_table_names系统变量为非零值时,不区分大小写。其它时候区分大小写。
(6)字符串值。字符串值是否区分大小写,具体看它是否是二进制还是非二进制串,还取决于字符集的排序规则。
由于MySQL服务器依赖于操作系统的文件系统,而有些操作系统又区分文件大小写, 所以为了避免大小写问题演变成一个刺手难题。必须执行一些可行的方法:
(1)选定一种大小写方案。(最好统一用小写,因为InnoDB引擎在其内部都是用小写)
(2)在创建数据库和表之前,将系统变量lower_case_table_names设置为1。效果:在创建表相应的磁盘文件之前,服务器会先把表名转换为小写。在引用该表时,服务器会先把该表名字转换为小写,然后再在磁盘上查找。
四、字符集支持(字符集决定了允许出现在字符串里的字符)
MySQL提供了以下这些字符集特性。
(1)MySQL服务器允许同时使用多种字符集。
(2)一个给定的字符集可以有一种或多种排序规则。
(3)支持Unicode的字符集
(4)可以分别在服务器、数据库、表、列和字符串常量等这些层次上指定字符集。
(5)还有几个函数和运算符可用来将一些单独的值从一种字符集转换成另一种。CHARSET()函数可返回某个给定值的字符串。类似地,COLLATE运算符可更改某个字符串的排序规则,而COLLATE()函数能返回某个给定字符串的排序规则。
(6)SHOW语句和INFORMATION_SCHEMA库里的数据表能提供与可用字符集和可用排序规则相关的信息。
(7)当更改某个索引过的字符列时,MySQL服务器会自动对索引进行重新排序。
指定字符集:
(1)服务器的默认字符集和排序规则是在编译时构建好的,可以通过设置系统变量character-set-server和collation-server来改写它们。
(2)在创建和修改数据库和表时候,可用指定数据库、表和列的字符集和排序规则,
即:CHARACTER SET charset COLLATE collation
查看字符集:
(1)查看系统支持的字符集和排序规则。
SHOW CHARACTER SET; SHOW COLLATION;
(2)查看服务器当前的字符集和排序规则。
SHOW VARIABLES LIKE; SHOW VARIABLES LIKE;
(3)查看数据库、表的字符集。
SHOW CREATE [DATABASE|TABLE] name\G;
(4)查看表中所有列的字符集。
SHOW FULL COLUMNS FROM tbl_name;