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

    数值类型


     1.整数类型(有符号、无符号)

          整数类型   是否为标准sql类型 字节 有符号最小值 有符号最大值 无符号最小值 无符号最大值
    tinyint 1字节 -128 127 0 255
    smallint -- 2字节 -32768               32767 0 65535
    mediumint -- 3字节 -8388608 8388607 0 1677215
    int或integer 4字节 -2147483648 2147483647 0 4294967295
    bigint -- 8字节 -9223372036854775808 9223372036854775807 0 18446744073709551615

      (1)对于整型数据,MySQL 还支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不指定默认为 int(11)。一般配合zerofill使用,顾名思义,zerofill就是用“0”填充的意思。以下几个例子分别描述了填充前后的区别。

      drop table test;
      create table test (id1 int,id2 int(5));
      insert into test values(1,1);
      select * from test;
      | 1 | 1 |
      alter table test modify id1 int zerofill;
      alter table test modify id2 int(5) zerofill;
      select * from test;
      | 0000000001 | 00001 | -- 在命令行下起作用,在navicat 中不起作用 

      如果一个列指定为 zerofill,则 MySQL 自动为该列添加无符号属性。

      设置了宽度限制后,如果插入大于宽度限制的值,不会对插入的数据有任何影响,还是按照类型的实际精度进行保存,这时,宽度格式实际已经没
    有意义。表 test 的字段 id1 中插入数值 1,id2 中插入数值 1234567,位数为 7,大于 id2 的显示位数 5。 

      drop table test;
      create table test (id1 int,id2 int(5));
      insert into test values(1,1234567);
      select * from test;
      | 0000000001 | 1234567 |

      (2)整数类型还有一个属性:auto_increment。在需要产生唯一标识符或顺序值时,可利用此属性。auto_increment 值一般从 1 开始,每行增加 1。在插入 null 到一个 auto_increment 列时,mysql 插入一个比该列中当前最大值大 1 的值。一个表中最多只能有一个auto_increment列。

    2.浮点数类型(小数类型)

    浮点数类型 是否为标准sql类型 字节 最小值 最大值 备注
      float            是 4字节 ±1.75494351E-38 ±3.402823466E+38

    当需要精确到小数点10位以后,选择double类型。

    double            是 8字节 ±2.2250738585072014E-308 ±1.7976931348623157E+308

    3.定点数类型(小数类型)

    定点数类型 是否为标准sql类型 字节 最小值 最大值 备注
    dec(m,d)或decimal(m,d) m+2 与double相同 与double相同 该类型的取值范围和double相同,但有效值范围由m和d来决定

    float、double数据类型存储的是近似值,而dec存储的是字符串,因此它的精度更高;

    在需要表示金额等货币类型时,优先选择dec类型

         浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该值一共显示 M 位数字(整数位+小数位)。

      定点数类型不指定精度时,默认的整数位为 10,默认的小数位为 0。

      浮点数如果不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值 decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。

    4.位类型 BIT(M)
      对于 BIT(位)类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M 范围从 1~64,如果不写则默认为 1 位。
      对于位字段,直接使用 SELECT 命令将不会看到结果,可以用 bin()(显示为二进制格式)或者 hex()(显示为十六进制格式)函数进行读取。

    mysql> desc test;
    +-------+--------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra|
    +-------+--------+------+-----+---------+-------+
    | id      | bit(1)  | YES|       | NULL |           |
    +-------+--------+------+-----+---------+-------+
    insert into test values(1);
    select * from test;
    +------+
    | id     |
    +------+
    |         |
    +------+
    select bin(id),hex(id) from test;
    +---------+---------+
    | bin(id) | hex(id) |
    +---------+---------+
    |    1       |   1       |
    +---------+---------+
    数据插入 bit 类型字段时,首先转换为二进制,如果位数允许,将成功插入;如果位数小于实际定义的位数,则插入失败。
    insert into test values(2); 报错
    因为 2 的二进制码是“10”,而 id 的定义是 bit(1),所以无法插入。
    alter table test modify id bit(2);
    insert into test values(2);
    select bin(id),hex(id) from test;
    +---------+---------+
    | bin(id) | hex(id) |
    +---------+---------+
    |    1       |     1     |
    |  10       |     2     |
    +---------+---------+


    字符串类型

    char(m)     m 为 0~255 之间的整数
    varchar(m)     m 为 0~65535 之间的整数,值的长度+1 个字节

    tinyblob       允许长度 0~255 字节,值的长度+1 个字节
    blob               允许长度 0~65535 字节,值的长度+2 个字节
    mediumblob       允许长度 0~167772150 字节,值的长度+3 个字节
    longblob           允许长度 0~4294967295 字节,值的长度+4 个字节

    tinytext           允许长度 0~255 字节,值的长度+2 个字节
    text           允许长度 0~65535 字节,值的长度+2 个字节
    mediumtext         允许长度 0~167772150 字节,值的长度+3 个字节
    longtext               允许长度 0~4294967295 字节,值的长度+4 个字节


     enum 类型   

    enum 中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对 1~255 个成员的枚举需要 1 个字节存储;对于255~65535 个成员,需要 2 个字节存储。最多允许有 65535 个成员。
    create table test(sex enum('男','女','未说明性别','未知'));
    insert into test values('男'),('女'),('未说明性别'),('未知');
    insert into test values('1'),('2'),('3');
    insert into test values(1),(2),(3);
    insert into test values('0'); //插入空字符串'',不是null
    insert into test values(0); //报错
    insert into test values('男人');//报错
    select * from test;
    select * from test where sex != '';


    set 类型

    create table t (col set ('a','b','c','d');
    insert into t values('a,b'),('a,d,a'),('a,b'),('a,c'),('a');
    Set 和 ENUM 区别在于 Set 类型一次可以选取多个成员,而 ENUM则只能选一个。

      

      

  • 相关阅读:
    Android 开发工具类 19_NetworkStateReceiver
    Android 开发工具类 18_NetWorkUtil
    Sticky Footer (让页脚永远停靠在页面底部,而不是根据绝对位置)
    min-height最小高度的实现(兼容IE6、IE7、FF)(解决IE6不兼容min-height)
    不同浏览器设置背景透明度
    讨论内外边距对行内元素是否起作用,则要对行内替换元素和行内非替换元素分别讨论:
    超链接访问过后hover样式就不出现的问题
    解决:子元素设置margin-top,父元素也受影响的问题
    制作0.5px像素的细条
    去掉inline-block元素间隙的几种方法
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/6685815.html
Copyright © 2011-2022 走看看