MySQL的数据类型
Mysql的数据类型主要分为三类: 数字型、字符串型、日期和时间类型
需要学习者着重了解的是char与varchar的固定长度与可变长度的意义、int(M)所代表的意义
数字型
整型(部分):
类型 | 字节 |
---|---|
TINYINT | 1 |
BOOL | 1 |
SMALLINT | 2 |
INT(也就是INTEGER) | 4 |
BIGINT | 8 |
浮点(部分):
类型 | 字节 |
---|---|
FLOAT | 8或4 |
DOUBLE | 8 |
计算机最小单位为’位’(只有0或1两个值),单位是bit。
28bit=1byte(字节),4个字节为28x28x28x28=232(注意是相乘的关系,而不是乘以4)
字符串类型
类型 | 包含 | 说明 |
---|---|---|
普通文本类型 | CHAR(M) | 固定长度为M个字符,M的取值范围是0~255,固定长度意味着当你存储了小于M的字符时,mysql将会自动在后面加上空格直至总体长度达到M(在取的时候会trim掉多余空格的)。这样整齐的长度存储方式相对于可变长度的存储更有利于检索,但也浪费了空间。适用场景:身份证号码等固定长度数值 |
普通文本类型 | VARCHAR(M) | 可变长度存储,如存储的字符小于M,实际上存储的不会以空格填充。如果超过了M个字符,会被自动截取扔掉的。还要注意他会自动加一个字符来存储长度。他更节省空间,但相比char检索慢。 |
可变类型 | TEXT | 适合存储长文本数据 |
可变类型 | BLOB | 适合存储二进制数据,比如声音、图像等 |
特殊类型 | ENUM(“value1”,“value2”,…) | 该类型的列只可容纳所列值之一或NULL,它非常适合SELECT的OPTION选项组 |
特殊类型 | SET(“value1”,“value2”,…) | 类似于ENUM |
字符与字节的关系:字符是有编码的,编码方式不同,它换算出来的字节则不同
ANSI编码标准下,每个英文及数字占1个字节,每个汉字占2个字节。
UNICODE编码标准下,所有字符都占2个字节。
UTF-8编码标准下,每个英文及数字占1个字节,每个汉字占3个字节。
注意:int(M)—— 这里的M与varchar(M)中代表的意义不同,varchar中表示的是存储字符的长度个数,int中表示的是查出的结果在显示时展现的宽度,int中的M并不会影响存储字符的长度,int的字节固定就是4个字节。展现宽度指的是,比如M=3,数值为24,那么查得的展示结果为 024,即会展现M位数值,不足前面补零、超了也无所谓(比如M=3,数值为4212,展示结果为4212)。
日期和时间类型
类型 | 格式 |
---|---|
DATE | YYYY-MM-DD |
TIME | HH:MM:SS |
DATETIME | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | |
YEAR |
如果传入不合法的值,将会被0代替