MySQL的学习笔记:数据类型
实例:
Teacher(Teacher_id, Teacher_name, age, Enter_time ,professional)
Teacher_id |
Teacher_name |
age |
Enter_time |
professional |
10101 |
潘多拉 |
35 |
1998-7-2 |
副教授 |
10102 |
吉米 |
27 |
2013-7-5 |
讲师 |
10103 |
郝本 |
45 |
1995-8-10 |
副教授 |
10201 |
田野 |
42 |
1994-7-15 |
副教授 |
10202 |
赵瑾 |
32 |
2012-7-12 |
讲师 |
20201 |
钱多多 |
50 |
1996-7-2 |
教授 |
MySQl数据类型
数值类型
整数类型
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
TINYINT |
1 字节 |
(-128,127) |
(0,255) |
小整数值 |
SMALLINT |
2 字节 |
(-32 768,32 767) |
(0,65 535) |
大整数值 |
MEDIUMINT |
3 字节 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整数值 |
INT或INTEGER |
4 字节 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
大整数值 |
BIGINT |
8 字节 |
(-9223372036854775808,9223372036854775 807) |
(0,18 446 744 073709 551 615) |
极大整数值 |
例如:定义年龄字段age为无符号数,可以使用SQL片段:
age tinyint unsigned
其中用unsigned约束年龄age的取值不能为负数
小数类型
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
FLOAT |
4 字节 |
-3.402 823 466 E+38~-1.175 494 351 E-38 |
0和1.175 494 351 E-38~3.402 823 466 E+38 |
单精度浮点数值 |
DOUBLE |
8 字节 |
-1.797 693 134 862 315 7 E+308~-2.225 073 858 507 201 4 E-308) |
0和2.225 073 858 507 201 4 E- 308~1.797 693 134 862 315 7E+308 |
双精度浮点数值 |
DECIMAL |
DECIMAL(length,precision) |
length决定小数的最大位数precision用于设置小数位数 |
length决定小数的最大位数precision用于设置小数位数 |
小数值 |
decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定该小数的最大位数,precision用于设置精度(小数点后数字的位数)。
例如:
decimal (5,2)表示小数取值范围:-999.99~999.99
decimal (5,0)表示: -99999~99999的整数。
日期类型
类型 |
字节大小 |
范围 |
格式 |
用途 |
DATE |
3 |
‘1000-01-01’ ~’9999-12-31’ |
YYYY-MM-DD |
日期值 |
TIME |
3 |
'-838:59:59‘ ~‘838:59:59’ |
HH:MM:SS |
时间值或持续时间 |
YEAR |
1 |
‘1901’~’2155’ |
YYYY |
年份值 |
DATETIME |
8 |
‘1000-01-01 00:00:00’ ~’9999-12-31 23:59:59’ |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
TIMESTAMP |
4 |
‘1970-01-01 00:00:00’ ~’2038’ |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值,时间戳 |
字符串类型
类型 |
大小 |
用途 |
CHAR(n) |
0-255字节 |
定长字符串 |
VARCHAR(n) |
0-65535 字节 |
变长字符串 |
TINYTEXT |
0-255字节 |
短文本字符串 |
TEXT |
0-65 535字节 |
长文本数据 |
MEDIUMTEXT |
0-16 777 215字节 |
中等长度文本数据 |
LONGTEXT |
0-4 294 967 295字节 |
极大文本数据 |
- char是定长,无论实际字段多长,占用空间总为n
- varchar是变长,只要实际字段长度小于n,那么长度为实际长度
复合类型
类型 |
最大值 |
说 明 |
备注 |
Enum (“value1”,“value2”, …) |
65535 |
该类型的列只可以容纳所列值之一或为NULL |
类似单选框 |
Set (“value1”,“value2”, …) |
64 |
该类型的列可以容纳一组值或为NULL |
类似复选框 |
二进制类型
类型 |
大小 |
用途 |
Binary(n) |
0-255字节 |
较短的二进制 |
VARBinary(n) |
0-65535 字节 |
较长的二进制 |
Bit(n) |
0-64字节 |
短二进制 |
TINYBLOB |
0-255字节 |
较短的二进制 |
BLOB |
0-65 535字节 |
图片、声音等文件 |
MEDIUMBLOB |
0-16 777 215字节 |
图片、声音、视频等文件 |
LONGBLOB |
0-4 294 967 295字节 |
图片、声音、视频等文件 |
一般规则
- 在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型
- 数据类型越简单越好
- 在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。
- 尽量采用精确小数类型(例如decimal),而不采用浮点数类型。
- 尽量避免NULL字段,建议将字段指定为NOT NULL约束。