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文本不占用记录长度,本身十个字节

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

  • 相关阅读:
    熟悉常用的HBase操作,编写MapReduce作业
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化与保存
    获取全部校园新闻
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    leetcode
    归并排序
    选择排序法
  • 原文地址:https://www.cnblogs.com/leaf-blog/p/10910861.html
Copyright © 2011-2022 走看看