Mysql 常用的数据类型

前言:

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

整数型:

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

END !

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值