zoukankan      html  css  js  c++  java
  • 0603mysql基础:数据类型

    数字型=============================================

    一、整形

    1、tinyint:小整数型、常用

    大小:1字节=2^8=256

    范围:有符号(默认的signed)(-128,172)

       无符号(unsigned)(0,255)

    2、smallint:大整数型

    大小:2字节=2^16

    范围:有符号(默认的signed)(-32 768,32 767)

       无符号(unsigned)(0,65 535)

    3、mediumint:大整数型

    大小:3字节=2^24

    范围:有符号(默认的signed)(-8 388 608,8 388 607)

       无符号(unsigned)(0,16 777 215)

    4、int:大整数型、常用

    大小:4字节=2^32

    范围:有符号(默认的signed)(-2 147 483 648,2 147 483 647)

       无符号(unsigned)(0,4 294 967 295)

    5、bigint:大整数型

    大小:8字节=2^64

    范围:有符号(默认的signed)(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)

       无符号(unsigned)(0,18 446 744 073 709 551 615))

    二、小数

    1、精度

    精度就是你能精确到多少位
    单精度用32位二进制表示
    双精度用64位表示  他们能精确到小数点后的位数是不同  也就是精度不同

    2、浮点型

    float(M,D)  单精度(占4个字节)  M表示该值的总共长度,D表示小数点后面的长度

    double(M,D)  双精度(占8个字节)  M表示该值的总共长度,D表示小数点后面的长度

    3、定点型、常用

    decimal(M,D) 12 个字节  M表示该值的总共长度,D表示小数点后面的长度

    4、浮点与定点的区别

    定点小数的本质是整数,平移了小数点(x10的n次方)。浮点数则是用指数和尾数来表示。
    浮点的意思就是近似等于某个值,不是精确数值
    浮点数表示的范围大,运算速度慢,存在精度误差,适合用来存储数学上的变量。定点数表示的范围精度一定,运算速度高,没有精度误差,适合用来表示货币。

    FLOAT和DOUBLE在不指 定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。

    字符型=====================================================================
    1、char
            大小:0-255字符
            用途:定长字符串  
    2、varchar
            大小:0-65535字符
            用途:变长字符串  
    3、tinyblob
            大小:0-255字符
            用途:不超过 255 个字符的二进制字符串
    4、tinytext
            大小:0-255字符
            用途:短文本字符串
    5、blob
            大小:0-65535字符
            用途:二进制形式的长文本数据
    6、text
            大小:0-65535字符   text和varchar基本相同。text会忽略指定的大小这和varchar有所不同,text不能有默认值。
            用途:长文本数据
    7、mediumblob
            大小:0-16 777 215字符
            用途:二进制形式的中等长度文本数据
    8、mediumtext
            大小:0-16 777 215字符
            用途:中等长度文本数据
    9、longblob
            大小:0-4 294 967 295字符
            用途:二进制形式的极大文本数据
    10、longtext
            大小:0-4 294 967 295字符
            用途:极大文本数据
    11、enum(“member1″, “member2″, … “member65535″)
            enum数据类型就是定义了一种枚举,最多包含65535个不同的成员。当定义了一个enum的列时,该列的值限制为列定义中声明的值。如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。如果声明了NOT NULL,则列表的第一个成员是默认值。
    12、set(“member”, “member2″, … “member64″)
      set数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。值的选择限制为列定义中声明的值。
      enum与set举例
            /* 创建表格 */
      mysql> create table enum_set_table(
      -> id int auto_increment primary key,
      -> gender enum('M','F'),
      -> hobby set('music','movie','swimming','footbal')
      -> );
      Query OK, 0 rows affected (0.01 sec)

    /* 一个enum值,一个set值,二者均使用选项的字符串格式 */
    mysql> insert into enum_set_table(id,gender,hobby) values(null,'M','music');
    Query OK, 1 row affected (0.01 sec)

    /* 一个enum值,多个set值,二者均使用选项的字符串格式 */
    mysql> insert into enum_set_table(id,gender,hobby) values(null,'F','music,movie,footbal');
    Query OK, 1 row affected (0.00 sec)

    /* 一个enum值,一个set值,二者均使用选项的数字格式 */
    mysql> insert into enum_set_table(id,gender,hobby) values(null,1,1);
    Query OK, 1 row affected (0.00 sec)

    /* 一个enum值,多个set值,二者均使用选项的数字格式,其中enum的值 2<=>'F',15=1+2+4+8 <=> 'music,movie,swimming,footbal' */
    mysql> insert into enum_set_table(id,gender,hobby) values(null,2,15);
    Query OK, 1 row affected (0.00 sec)

    /* 一个enum值,多个set值,enum值使用选项的字符串格式,set值使用选项的数字格式,7=1+2+4 <=> 'music,movie,swimming' */
    mysql> insert into enum_set_table(id,gender,hobby) values(null,'F',7);
    Query OK, 1 row affected (0.01 sec)

    /* 查询结果 */
    mysql> select * from enum_set_table;
    +----+--------+------------------------------+
    | id | gender | hobby                        |
    +----+--------+------------------------------+
    |  1 | M      | music                        |
    |  2 | F      | music,movie,footbal          |
    |  3 | M      | music                        |
    |  4 | F      | music,movie,swimming,footbal |
    |  5 | F      | music,movie,swimming         |
    +----+--------+------------------------------+
    5 rows in set (0.00 sec)
        具体详解
            1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
    (字符占用的字节跟编码有关,比如MySQL中,1个utf8编码的字符占用3个字节.一个类型为char(32)的字段,表示能存储32个字符(比如md5串),
    如果表的编码为utf8,则该字段占用32*3=96个字节.)

    2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
    3.超过char和varchar的n设置后,字符串会被截断。
    4.char的上限为255字节,varchar的上限65535字节,text的上限为65535。
    5.char在存储的时候会截断尾部的空格,varchar和text不会。
    6.varchar会使用1-3个字节来存储长度,text不会。
    日期时间型=========================================================================================================
    1、date
            大小:3字节
            范围:1000-01-01/9999-12-31
            格式:YYYY-MM-DD
            用途:日期值
    2、time
            大小:3字节
            范围:'-838:59:59'/'838:59:59'
            格式:HH:MM:SS
            用途:时间值或持续时间
    3、year
            大小:1字节
            范围:1901/2155
            格式:YYYY
            用途:年份值
    4、datetime
            大小:8字节
            范围:1000-01-01 00:00:00/9999-12-31 23:59:59
            格式:YYYY-MM-DD HH:MM:SS
            用途:混合日期和时间值
    5、timestamp
            大小:4字节
            范围:1970-01-01 00:00:00/2038
       结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
            格式:YYYYMMDD HHMMSS
            用途:混合日期和时间值,时间戳
    关于int(4)/varchar(255)中的4和255是什么的问题,即数据类型后面的括号有什么玄机
        括号里的数字叫数据的宽度,我们不能一概而论,因为不同的数据类型对宽度的处理也不一样:
    1、整数类型,这里显示的宽度和数据类型的取值范围是没有任何关系的,显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入,而且能够显示出来。
    例如上面的udi,显示的宽度是4,但是我向uid中插入100001,也是可以的,保存和显示的都会是100001
    如果你不设置宽度,系统将添加默认的宽度 tinyint(4),smallint(6),mediumint(9),int(11),bigint(20),这些默认的宽度是跟该类型的取值范围长度相关。
    2、字符串类型,字符串类型这个宽度才真的用上了。不管是char还是varchar,宽度都定义了字符串的最大长度
    例如上面的 password varchar(20),如果你输入了一个21个字符的密码,那么保存和显示的只会是前20个字符,你将丢失一个字符信息,char同理。由于varchar是变长存储的,所以实际开发中我们一般都把varchar的宽度设为最长255,反正你没用完它也不会浪费空间。
    3、浮点和日期等数据类型对数据的宽度没有要求,一般也不设置,默认是0
    括号中如果不知名,下面类型会出现如下结果
    tinyint默认4  int默认11  char默认是1  varchar会报错  text默认是其最大长度

  • 相关阅读:
    Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法
    如何修改织梦dedecms文章标题的最大长度
    织梦自定义表单后台管理增加全选功能,批量删除垃圾留言信息
    自定义表单SQL命令行批量删除垃圾留言
    织梦后台卡死的原因分析及开关功能解决办法
    织梦网站迁移的几种方法
    Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法
    织梦CMS被挂马特征汇总
    DedeCMS模板中用彩色tag做彩色关键词
    HDU6038
  • 原文地址:https://www.cnblogs.com/zhangbaozhong/p/9128320.html
Copyright © 2011-2022 走看看