zoukankan      html  css  js  c++  java
  • Mysql的数据类型

    更多:https://www.cnblogs.com/progor/p/8745690.html

    数据类型:

    列类型:

    所谓数据类型:对数据进行统一分类

    从系统数据角度出发就是为了使用统一方式进行管理

    更好的利用有限的空间

    Sql将数据类型分为三类:

    数值类型,字符串类型,时间日期型。

    数值型:

    数值型数据:都是数据,系统将数据分为整数型和小数型

    整数型:

    存放的都是数据

    在sql因为要考虑节省磁盘

    Tingint :迷你整型,使用一个存储字节(常用),最多状态有256种

    Smallint: 小整型,使用俩个字节,表示状态最多有65535种

    Mediunint:中整型,使用三个字节存储

    Int:表准整型,使用四个字节存储(常用)

    Bigint :大整型,使用八个字节存储。

    在sql中数据库全部都是默认有符号的;分正负,使用无符号数据:给约定的数据类型限定

    Int unsigned --无符号,从零开始。

    查看表结构的时候,发现每个字段的数据类型之后都会带一个括号,里面有指定数值

      显示宽度:数据最终显示的位数(包含符号)如-123是四位,253是三位,

    显示宽度:没什么特别意义只是默认告诉用户显示的形式而已。实际上用户可以控制,不会改变数据的实际大小。

    显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度:

    通常需要搭配一个前导0来增加宽度,不改变值的大小:zerofill(零填充)

    零填充的意义(显示宽度):保证数据格式。

    小数型:

    带小数点或者范围超过整型的数值类型。

    Sql中将小数型分为俩种:浮点型和定点型

    浮点型:小数点浮动,精度有限,会丢失精度。

    定点型:小数点固定,精度有限,不会丢失精度。

    浮点型:

    浮点型数据是一种精度型数据:因为超出规定范围之后会丢失精度(四舍五入)。

    浮点型分为俩种:float:单精度,占用四个字节存储数据,大概七位。

                    Double:双精度,占用八个字节存储数据,大概十五位左右。

    创建浮点数表:浮点的使用方式:直接float。

    表示没有小数部分;float(M,D)M表示总长度,D表示小数部分长度,整数部分长度为(M-1)。 浮点型数据的插入:整数部分不能超过长度,但是小数部分可以超过长度(系统会自动四舍五入)结果:浮点数一定会进行四舍五入(超出精度范围)。

    浮点数如果是因为系统进位导致整数部分超出指定长度:那么系统也会允许成立。

    定点型:

    绝对的保持整数部分不会被四舍五入(不会丢失精度),小数部分有可能丢失(理论上小数部分也不会丢失精度)

    浮点数如果进位导致长度溢出,没有问题。但是定点数不行、

    时间日期型:

    Datetime:时间日期,格式是YYYY-MM-DD HH:ii:ss

    Date :日期就是datetime的date部分

    Time:时间段,指定某个区间之间,时间到时间

    Timestamp:时间戳,是从1970开始的格式与datatime一致,

    Year:年份,两种格式,year(2)。

    插入数据:

    时间time可以说负数,year可以使用2位数插入,也可以使用四位数。

    Timestamp字段:只要是当前所在记录别更新,该字段一定会自动更新成当前时间。

    网站以php位实现主要操作对象,php有非常强大的日期处理函数:date,只需要一个时间戳就可以转换成任意类型函数的时间:以php为主的时候,都是在数据库使用时间戳(整型)来存储时间。

    字符串类型:

    在sql中将字符串分为了6类

    Char ,varchar,text,blob,set和enum

    Char:定长字符串

    定长字符串。磁盘在定义结果的时候就已经确定了最终数据的存储长度。

    Char[L]:L代表length,可以存储长度,单位为字符最大长度值为255

    例:char[4]在utf8环境下需要4*3=12个字节

    Varchar:变长字符串

    Varchar在分配空间长度的时候,按照最大空间分配,但是实际上最终用了多少是根据具体的数据来确定,

    Varchar(L):L代表字符长度理论上长度65536个字符

    但是会多1到2个字节来确定存储的实际长度

    例:varchar(10)确实存了十个汉字,在utf8的环境下10*3+1=31字节

    如何选择定长还是变成字符串?

      定长的磁盘空间比较浪费空间,但是效率高;

    变长的磁盘空间比较节省但是,效率低;

    如果数据基本上确定长度一样,就是定长如果数据不能确定长度(不同数据有变化)

    文本字符串:

    如果数据量特别大,通常超过255个字符,就会使用文本字符串,文本字符串会根据存储数据的格式进行分类:text(文字存储)和blob(二进制数据,二进制存储路径)

    枚举字符串:enum

    枚举:enum,事先将可能出现的结构都设计好,实际上就是存储数据必须是规定好的数据中的一个。

    枚举使用方式

    定义:enum(可能出现的元素列表)

    如:enum(‘女’,’男’,’人妖’,’保密’,);

    使用:存储数据,只能存储上面定义好的数据

    例:创建枚举表,create table my_enum(

    Gender enum(‘男’,’女’,’人妖’) character utf8

    加入数据;作用之一就是规范数据格式

    数据只能是规定数据中的一个

    Insert into my_enum values(‘男’),(‘人妖’);

    作用之二节省空间(枚举 别名 单选框)(存储的是数值)

    在mysql中系统也是自动转换数据格式的,

    证明字段存储的是数值:将取出来的+0

    就可以判断出原来的数据到底是字符串还是数值,如果是字符串结果为0,否则为其他值。

    例:select gender+0,gender from My_enum;

    找出枚举元素的规律,按照元素出现顺序从1开始编写

    枚举原理:枚举在进行数据规范的时候,系统会自动建立一个数值与枚举元素的对应关系(关系放在日志中)然后在进行数据插入的时候,系统自动将字符串转换成对应的数字存储,然后进行数据提取的时候,系统自动将数值转换成对应的字符串显示。

    集合字符串:

    集合跟枚举很类似:实际存储的是数值而不是字符串(集合是多选)

    例:create table my_set (hobby set (‘篮球’,’足球’,’乒乓球’))charset utf8;

    插入数据:可以使用多元素字符串进行组合,也可以数值。

    例:insert into my_set values (‘足球’)

    Insert into my_set values(2)

    集合中:每一个元素对应一个二进制位,被选中为一,没有则为零,最后方向反过来

      例:110------>011=3

     Select hobby +0 ,hobby from my_set;

    集合元素的顺序没有关系,最终系统会匹配顺序;

    集合的强大功能在于能够规范数据和节省空间。

    Php也可以规范数据但是对于php来说效率优先;而且数据的维护可以通过数值进行增加php的维护成本;php根本没有办法判断数据在数据库的形式。

    MySql记录长度

    Mysql规定:任何一条记录最长不能超过65535个字节(varchar永远达不到理论值)

    Varchar实际存储长度能达到多少呢,看字符集

    在utf8下varchar的实际顶配varchar(21844)21844个字符-----21844*3+2=65532+2=65534

    Gbk下实际顶配varchar(32766)32766个字符           ------32766*2+2=65532+2=65534

    Mysql记录中如果任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节存储在null(若想释放null所占用的字节,必须保证所有字段不为空)

    Mysql中text文本字符串,不占用记录长度;额外存储,但是text文本字符串也是记录的一部分一定需要占据部分长度:10字节(保留数据的地址以及长度)

    列属性:

    列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要一些额外的约束来保证数据的完整性

    列属性:null/not null

            Default

            Primary key

            Unque key

    Auto_increment

    Comment

    空属性:null

    Null(默认的和not null不为空)虽然是默认的,数据基本上都是字段为空,但是实际上真正开发的时候,尽肯能地保证所有的数据都不为空;空数据没有意义,空数据不能参加运算。

    列描述:comment

    没有实际意义,专门用来描述字段,会根据表的创建语句保存(用来给dba)了解的。

    例:comment’姓名’;

    默认值:default

    某种数据会经常出现在某个具体的值

    想要使用某个默认值,可以不一定指定列表,不使用字段列表,可以使用default关键字代替值

    例:insert into my_default values(‘张三’,18,default);

    回顾

    字段类型(列类型):数值型,时间日期型,字符串类型

    数值型:整型,小数型(浮点与定点)

    时间日期型:datetime,time,datetimestamp,year

    字符串类型:定长,变成,

               文本字符串(text和blob)

               枚举与集合

    Mysql记录长度:65535个字节

                   Null占一个字节

                   text文本不占用记录长度,本身十个字节

    字段属性:空属性,列描述,默认值

  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/leaf-blog/p/10910861.html
Copyright © 2011-2022 走看看