mysql 基础类型 认识和使用

每次设计表结构都在纠结用什么类型!

今天统一整理下,深度认识下各个类型!

1.整型

数据类型字节数带符号最小值带符号最大值不带符号最小值不带符号最大值
TINYINT1-1281270255
SMALLINT2-3276832767065535
MEDIUMINT3-83886088388607016777215
INT4-2147483648214748364704294967295
BIGINT8-92233720368547758089223372036854775807018446744073709551616

需要注意的点:

    在设置数据库类型的时候 例如int(11)  后面的数字用处是显示几位,无论写几都是占用相同的4字节(不要想着数字小占用的存储就小)。不过,当你的数据位数大于设置时的数字,那么全部显示出来忽略您设置的数字。所以这个东西唯一 的用处就是当你想要存储001这样的数字,设置int(3) unsigned zerofill  记住后面的zerofill的才是补0的命令。还有最后一个当时比较迷惑我的。为什么普遍设置int(11),明明最多是10位为什么要设置11位,因为还有一个符号位负号。(记住这个负号,接下来还有)

    整型总结:只要你想存整型的数据,尽管设置int(11)。当然要注意值的范围。

2.小数

这里说小数,主要是以为具有两种表示小数的类型

一种是 float 和 double 浮点数 一种是decimal和numeric 定点数

首先说明,如果你想把浮点数的东西弄明白,首先你得先明白它是如何存储的,但是这个知识篇幅过大,在这里只介绍如何用,用的时候的注意点

先说float和double

    float(M,D) double(M,D)

M总显示位数D小数点后面显示的位数,当位数过多四舍五入。

再说decimal和numeric

这两个东西是一个东西,存储方式和使用都是一样的所以只介绍一个就可以了

注意点一:这个东西如果后面不够位数,例如类型为(5,5) 如果存入的是12345.12 那么在数据库中会显示为12345.12000,在 一些工具上是不显示的 要注意。

注意点二:当小数给的位数过多会怎么样,例如类型为(5,5)存入的是12345.12345678 那么数据库会直接截取五位,12345.12345

注意点三:当整数位给的过多怎么办,例如(5,5) 存入的是123456.12345 那么数据库直接获取整数五位小数五位的最大值,99999.99999,当小数和整数均 超过,那么直接按整数超过算

注意点四:最为重要,在存储小数的时候,用定点数存储,不要用float存。一旦float类型的列sum就发生精度不对的问题。往往会出现好多位的小数。不要问为什么,去看计算机组成原理。记住小数就用定点数。人家oracle都没有浮点数,想想为什么?

还有一点 ,当不给(M,D)的情况下是怎么存储的

float和double直接按照实际精度存储,那么什么是实际精度呢就是按照它自己的存储方式和 占用字节进行精度和范围的取舍,所以呢这块也得看计算机组成原理。回想下,是不是学这个的时候都在逃课啊。

decimal和numeric按照(10,0)存储

3.日期类型

数据类型字节数格式备注
date3yyyy-MM-dd存储日期值

         time

3HH:mm:ss存储时分秒
year1yyyy存储年
datetime8yyyy-MM-dd HH:mm:ss存储日期+时间
timestamp4yyyy-MM-dd HH:mm:ss存储日期+时间,可作时间戳


前三个就不说了,正常存储。

说说第四个和第五个的区别:

    占用字节不同,那么范围肯定不同了

    datetime   1000-01-01 00:00:00 —— 9999-12-31 23:59:59

    timestamp  1970-01-01 08:00:01 —— 2038-01-19  11:14:07

    timestamp的方便之处

    create_time timestamp default current_timestamp comment "创建时间",
    update_time timestamp default current_timestamp on update current_timestamp comment "修改时间",

    明白了吗?自动的创建时间和修改时间。不过是5.6之后有的注意哈。    

4.字符(char,varchar)

通过读这一小节,你可能会发现原来自己明白的是那么的少。(至少我是哈,至于你们相信你们都是大牛。嘿嘿)

首先说一点比较简单的区别:

    char类型会把字符串末尾所有的空格都删掉不存储,记住至少结尾的空格,而varchar会一股脑的都存储起来。

下面说说占用空间的问题:

char:

    0-255字符 例:char(255) 这个是固定的 无论何种编码格式最大字符就是255 (是255个字)

verchar:

    这个就比较麻烦了。

    首先你要明白,一行数据的总存储量最大是65K,所以某一个varchar字段的最大数量并不是固定的。

    先看看varchar是怎么占用空间的,首先要拿出1-2个字节存这个字段varchar的字符数量 255是1和2的分界线。应该名表吧(不明白的去看计算机组成原理)还要拿出一个字节表示是否为null(一般都要设置成非null,明白为什么了吧)

    剩下的就是给字符了 utf-8 是三个字节  urfmb4 是四个字节 gbk两个字节

    剩下的就自己算吧


在看看text、blob、mediumtext、longtext

这些东西我记得都不是存在这行数据中,而是存一个路径,然后再去找。所以能这些尽量不要存

tinytext    256B

text    64kB

mediumtext    16MB

longtext    4GB

    

     结束了,可能并不是很深入和明白。见谅!

有几点设计数据库字段类型的建议:

    不确定的能用varchar就不要用text等大的字符串变量

    能确定长度的就用char,存储很快滴

    能用数字的就不要用字符类型(这个么主要是数字好比较)

    

    




    


             

             




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值