前言:
Mysql 详细介绍,Very Nice : http://c.biancheng.net/view/2361.html
Mysql 常用的数据类型包括: 整数型: TINYINT、SMALLINT 、MEDIUMINT、INT或INTEGER、BIGINT 小数型:FLOAT、DOUBLE、DECIMAL 字符:CHAR、CARCHAR、TEXT 日期:DATE、DATETIME、TIMESTAMP
整数型:
Mysql 存储数据默认是有符号的,符号存储占一位, 通过设置 unsigned 表示该字段没有符号。 对于5种整数类型,MySQL 支持在类型名称后面的小括号内指定显示宽度(并不是该类型占用字节数)。 例如 int(5)表示当数值宽度小于 5 位的时候在数字前面填满宽度,可以配合 zerofill 使用,在数字前面填充0,在数字位数不够的空间用字符“0”填满, 无符号不指定宽度则默认为 int(11)。 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 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
小数型:
小数型包括: 浮点类型 和 定点数据类型(DECIMAL ),其中 浮点类型分为单精度浮点数(FLOAT)和双精度浮点数(DOUBLE) 定义方式 float(m,d)、double(m,d)、decimal(m,d), 其中M为精度(该值的总长度)D为标度(小数点后面的长度): 浮点类型md规则: 1<= d <= 30、1<= d <= m <= 255 定点数据类型md规则: 0 <= d <=30, 0<=d <= m <= 65 其中浮点类型是以二进制的形式保存数据的,当小数转化为二进制的时候会出现无限循环二进制,而 float 【4字节保存】和 double【8字节保存】 保存二进制位数有限,导致最终结果丢失精度,其中double 比 float 保存二进制更多一些,最终结果会更精准,但一样会丢失精度。 DECIMAL不会存在这种问题,会将超出小数部分 四舍五入 进行保存。【篇幅有限,不深入 】 关于DECIMAL : 对货币等对精度敏感的数据,应该用定点数表示或存储 DECIMAL 字段定义默认值, 一定写成0.00, 不要用默认的NULL, 否则在进行加减排序等操作时, 会带来转换的麻烦! 能用定点数据类型的字段最好用DECIMAL : decimal 在 mysql 内存是以字符串存储的。 下面我们来模拟一下小数插入情况(结果忽略float、double 可能存在丢失精度的情况): 例如:float(5,2)、double(5,2)、decimal(5,2)
插入值 实际保存 分析 4.5678 4.57 小数位数后最多2位,四舍五入后为 4.57 4.56 4.56 正常存储 5678.9 报错 小数位不够2位,补全0,导致储存位数超过5,报错
字符串:
常用的字符串数据类型有:CHAR、CARCHAR、TEXT char(n) 为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度,因此保存时无法保存右侧空格 例如 "您好 " 实际保存为 “您好” varchar(n) 是长度可变的字符串,实际存储时为 当前字符串和一个字符串结束字符来存储 char(n)、varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,需要注意的是 n 代表的储存的字符长度,注意是长度,计算字节时根据需要Mysql使用的编码,当utf-8 时:一个汉字占3字节,英文字母和数字占1字节 text :列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。 可以通过 SQL 计算每个字段每行的大小 : select LENGTH(fieldname) from tablename 其他字符类型: TINYTEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET
数据类型 范围 描述 用途 char(n) n取值 0~255 固定长度字符串,不足时右侧填充空格,保存 定长字符串 varchar(n) n 取值 0~21845 长度可变的字符串 变长字符串 text 0-65 535字节 约为64kb, 长文本数据 长文本数据
日期类型:
Date 日期只包含 年-月-日,时间格式 Date 和 Datetime存的什么读出来就是什么 TIMESTAMP还有一个重要特点,就是和时区相关,当插入日期时,timestamp存储的时候会转为utc存储,读出的时候也会转换成当前时区, timestamp适合用于记录字段最后更新时间,记录表更新时间时 一般配合 CURRENT_TIMESTAMP,例如表字段update_time 可以定义为:update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’
日期类型 大小 范围 格式 用途 DATE 3字节 1000-01-01 ~ 9999-12-31 %Y-%m-%d 日期值 DATETIME 8字节 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 %Y-%m-%d %H:%i:%s 日期和时间值 TIMESTAMP 4字节 1970-01-01 00:00:00 ~ 2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07 %Y-%m-%d %H:%i:%s 日期和时间值,和时区有关
END !