MySQL技术内幕第三章

MySQL技术内幕第三章

一、 数据值的类别

(1)数值:MySQL所能识别的数字包括整数、定点数或浮点数,以及位域值。
(2)字符串值:字符串值两端的引号既可以是单引号,也可以是双引号。请尽量使用单引号。字符串一般可以分别为两类,既二进制串和非二进制串。二进制串是一组字节序列,非二进制串是一个字符序列。非二进制都与字符集相关,字符集决定了哪些字符可以用;每个字符集都有一组或多种排序规则。
(3)时态(日期/时间)值:时态值包括日期值、时间值以及各种表示时间的值。
(4)空间值
(5)布尔值:布尔常量TRUE和FALSE将分别被当作1和0.它们不区分带下写。
(6)NULL值:NULL是一种“没有类型的“值。它通常用来表示”无值“、”未知值“。

二、 MySQL数据类型

(在数据值的基础上更加具体化

1.每种数据类型都有以下几个特点:

(1)它可以表示何种类型的值。
(2)这种类型的值要占用多少存储空间。
(3)值的长度是固定的还是可变的。
(4)MySQL会如何比较这种类型的值,如何对它进行排序。
(5)是否可以对这种类型进行索引,如何索引。

2.数字数据类型(4大类:整数类型,浮点数类型,定点数类型,位类型)

MySQL技术内幕第三章


M:数值的总位数。 通俗点讲,就是看有多少个数字,比如,5.6789,M就是5
D:小数点后面能保留几位。 比如上面的5.6789 ,D就是4。
字节:1字节=8位二进制数

位类型:BIT类型,BIT数据类型用于存储bit值,能够存储长度范围为1~64。采用 b’value’标记方式指定bit值,其中value是0或者1的序列,例如:b’111’代表7,b’10000000’代表128。

数字数据类型特有的属性:

(1)UNSIGNED属性(去符号)
(2)ZEROFILL属性(填充0)
(3)AUTO_INCREMENT(自增属性),可用于整数或浮点数类型。(一般用在整数值)

如何选择数字数据类型:

(1)看取值范围 (2)看精确度

3.字符串数据类型

(2大类:非二进制串二进制串。二进制串以字节为单位,非二进制串以字符为单位。)

非二进制类型:
MySQL技术内幕第三章
二进制类型:
MySQL技术内幕第三章
字符串数据类型特有的属性:
(1)CHARCTER SET (指定字符集) (2)COLLATION (指定排序规则)
注:这两个属性只适用于非二进制字符串。
如何选择字符串数据类型

(1)这些值是字符数据(用非二进制字符串类型)还是二进制数据(用二进制字符串类型)。
(2)比较操作需要区分大小写吗?如果是,则选择非二进制字符串类型。
(3)想要少占用存储空间吗?如果是,则选择一种可变长度的类型。
(4)列的取值总是从固定的某些值里选取吗?如果是,则选择ENUM或SET类型。
(5)尾部的填充值很重要吗?如果要求数据必须原样存入和取出,不能增加和移除尾部的空格,那么应该选用TEXT或VARCHAR列来存放非二进制串,二选用BLOB或VARBINARY列来存放二进制串。

4.时态(日期/时间)数据类型

MySQL技术内幕第三章
如何选择时态数据类型:

(1)看存储日期的精度
(2)如果想要日期时间类型,但有时候时间可以置空,那么可以不用 DATETIME类型,而用两列分别表示DATE类型和TIME类型。
(3)DATETIME和TIMESTAMP类型可以在DEFAULT子句中用CURRENT_TIMESTAMP函数默认当前日期

三、 选择数据类型

考虑的问题:

  1. 列要存储什么类型的值(数字,字符串,日期)
  2. 值是否都在某个特定区间内(需要考虑取值范围和字符串长度)
  3. 性能和效率方面要考虑哪些问题 (速度:数字类型>字符串类型,占用存储空间越小,性能越好。)