一. 数据类型介绍
表内存放的数据要有不同的类型,每种数据类型都要自己的宽度,而且宽度是可以选择的.
二. mysql常用数据类型 :
1. 数字
①. 整型 : tinyint int bigint
②. 小数 :
float : 在位数比较短的情况下不精准
double : 在位数比较长的情况下不精准
decimal : 任何为数都精准 //内部是以字符串形式去存储, 推荐使用
2. 字符串
①. char : 简单粗暴, 浪费空间, 存取速度快
②. varchar : 精准, 节省空间, 存取速度慢
③. sql优化 : 创建表时, 定长的类型往前放, 变长的类型往后放
④. 数据>255个字符时, 就把文件的路径放到数据库中.
3. 时间类型
①. datetime
4. 枚举类型和集合类型
①. enum 枚举, 多个选项选择一个
②. set 集合, 多选
三. 数值类型
※ . 紧跟数值类型后面的数字是显示宽度, 而不是存储宽度. 默认的显示宽度是在最大值的基础上 + 1 .
※ . 无符号参数 : unsigned
※ . 不足规定显示宽度是使用0补位 : zerofill
1. tinyint [ n ] [ undigned ] [ zerofill ]
①. 小整数, 数据类型用于保存一些范围的整数数值范围 :
②. 有符号取值范围 : 即带负号, 允许有负数
-128 ~ 127
③. 无符号取值范围 : 即不带负号,不允许有负数
0 ~ 255
2. int
①. 整数, 数据类型用于保存一些范围的整数数值范围 :
②. 有符号取值范围 : 即带负号, 允许有负数
-2147483648 ~ 2147483647
③. 无符号取值范围 : 即不带负号,不允许有负数
0 ~ 4294967295
3. bigint
①. 整数, 数据类型用于保存一些范围的整数数值范围 :
②. 有符号取值范围 : 即带负号, 允许有负数
-9223372036854775808 ~ 9223372036854775807
③. 无符号取值范围 : 即不带负号,不允许有负数
0 ~ 18446744073709551615
4. float [ (M, D) ] [ unsigned ] [ zerofill ]
①. 单精度浮点数(非准确小数值),M的全长,最大值为255,D是小数点后的位数,最大值为30.
②. 有符号取值范围 : 即带负号, 允许有负数
-3.402823466E+38 ~ 1.175494351E-38,
1.175494351E-38 ~ 3.402823466E+38
③. 无符号取值范围 : 即不带负号,不允许有负数
1.175494351E-38 ~ 3.402823466E+38
④. 精准度随着小数位数的增加而越来越不准确.
5. double [ (M, D) ] [ unsigned ] [ zerofill ]
①. 双精度浮点数(非准确小数值),M的全长,最大值为255,D是小数点后的位数,最大值为30.
②. 有符号取值范围 : 即带负号, 允许有负数
-1.7976931348623157E+308 ~ 2.2250738585072014,
2.2250738585072014E-308 ~ 1.7976931348623157E+308
③. 无符号取值范围 : 即不带负号,不允许有负数
2.2250738585072014E-308 ~ 1.7976931348623157E+308
④. 精准度随着小数位数的增加而越来越不准确. 但是精度比float要高.
6. decimal [ M, D ] [ undigned ] [ zerofill ]
①. 准确的小数值, M为整数部分的总个数(负号不算),最大值为65.D是小数点后的位数,最大值为30.
②. 无论小数有多少位, 精度始终准确.
四. 日期类型
1. date 年月日的形式
取值范围 : YYYY-MM-DD (1000-01-01 ~ 9999-12-31)
2. time 时分秒的形式
取值范围 : HH:MM:SS ("-838:59:59" ~ "-838:59:59")
3. datetime 年月日 时分秒的形式
取值范围 : YYYY-MM-DD HH:MM:SS (1000-01-01 00:00:00 ~ 9999-12-13 23:59:59)
4. year 年形式
取值范围 : YYYY (1901~ 2155)
5. timestamp 年月日时分秒形式
取值范围 : YYYYMMDD HHMMSS (1970-01-01 00:00:00~2037)
五. 字符类型
※ . char和varchar类型后括号内的参数是指字符的长度
1. char类型 : 定长,简单粗暴,浪费空间,存取速度块
字符长度范围 : 0 ~ 255 (一个中文是一个字符,是utf8编码的3个字节)
存储char类型的值时,如果插入的值字符数小于指定字符数,会在插入字符右侧填充空格满足长度.
查询表时,查出的结果会自动删除尾部的空格,如果不想将空格删除需要对mysql设置模式 : set sql_mode = " PAD_CHAR_TO_FULL_LENGTH ";
查询mysql的默认查询模式命令 : select @@sql_mode;
2. varchar类型 : 变长,精准,节省空间,存取速度慢
字符长度范围 : 0 ~ 65535(如果大于21845会提示用其他类型. mysql行最大限制为65535字节,字符编码为utf8);
varchar类型的存储数据为真实的数据,不会使用空格填充. 如果存储的数据中含有空格,空格也会被保存在表内
varchar类型会在真实数据前加1~2字节的前缀,该前缀用来表示真实数据的字节数,(1~2字节最大表示65535个字节,正好满足mysql对一行的最大字节数)
如果真实的数据<255字节则需要1字节的前缀(1字节 = 8bit 2**8最大表时数字为255)
如果真实的数据>255字节则需要2字节的前缀(2字节 = 16bit 2**16最大表示数字为65535)
3. 查询某一数据的字节或字符数
字节数 : length()
字符数 : char_length()
六. 枚举和集合类型
一个字段的值只能在给定的范围内选择
enum 单选 在给定的一个范围内选择一个值, 如 : 性别等
如果单选字段值插入了多个或不是给定范围内的值,会忽略
set 多选 在给定的范围内选择多个, 如 : 爱好等
如果set字段值插入了超出范围的的值,会报错.