美文网首页
mysql 数据类型(一)

mysql 数据类型(一)

作者: designer | 来源:发表于2020-05-12 16:30 被阅读0次

    1.整数型

    类型 大小 2的次方 范围(有符号) 范围(无符号) 用途
    TINYINT 1字节 2^8 (-128,127) (0,255) 小整数值
    SMALLINT 2字节 2^16 (-32768,32767) (0,65535) 大整数值
    MEDIUMINT 3字节 2^24 (-8388608,8388607) (0,16777215) 大整数值
    INT或INTGER 4字节 2^32 (-2147483648,2147483647) (4294967295) 大整数值

    2.浮点型

    FLOAT(m, d) 4 字节 单精度
    DOUBLE(m, d) 8 字节 双精度

    m总位数, d小数位数

    • float和double的区别
    • 和编程开发中一样, 默认保留的小数位数不同
    • 和编程开发中一样, 有效精度也不同
    • 和编程开发中一样, 浮点类型是不准确的
    • 所以在企业开发中千万不要使用浮点数来保存用户的准确(珍贵)信息(RMB)

    3.定点类型

    decimal(M, D)
    m总位数, d小数位数
    定点类型的本质: 是将数据分为两个部分来存储, 每个部分都是整数
    所以点点数不要滥用, 因为非常消耗资源

    4.字符类型

    CHAR(size) 0-255字节 定长字符串
    VARCHAR(size) 0-65535 字节 变长字符串
    注意点: 由于是字符类型, 所以传递值只能用单引号''
    4.1char(2) 和 varchar(2)的区别:

    • 它们最多都只能保存2个字符
    • char(2)不会回收多余的字符, 指定多少个就给我们多少个
    • varchar(2)会回收多余的字符, 用多少给多少
    • 由于char(2)不会回收多余的字符, 所以效率高
    • 由于varchar(2)会回收多余的字符, 所以效率相对低一些
      示例一:
      create table if not exists stu9(
      id int auto_increment primary key,
      name1 char(2),
      name2 varchar(2)
      );
      insert into stu9 values(null, 'ab', 'de');
      insert into stu9 values(null, '1', '2');
      insert into stu9 values(null, '123', '234'); #超出范围就会报错
      示例二:
      如果没有指定长度, 那么默认char就是255,varchar65535
      create table if not exists stu10(
      id int auto_increment primary key,
      name char(255)
      );
      注意点: 理论上varchar最多能够存储65535个字符, 但是实际的大小和表的编码方式有关
      create table if not exists stu11(
      id int auto_increment primary key,
      name varchar(65535)
      )charset=gbk;
      如果表的编码方式是UTF-8, 那么最多能够存储65535/3
      Column length too big for column 'name' (max = 21845); use BLOB or TEXT instead
      如果表的编码方式是GBK, 那么最多能够存储65535/2
      Column length too big for column 'name' (max = 32767); use BLOB or TEXT instead
      5.MySQL中每一行数据的大小限制
      注意点: 在MySQL中每一行数据最多只能存储65535个字节
      create table if not exists stu12(
      cls char(2),
      name varchar(32767) #会报错, 所有列的总大小超过了65535
      )charset=gbk;
      create table if not exists stu12(
      cls char(2),
      name varchar(32764) #只要所有列的中大小不超过65535就可以创建
      )charset=gbk;

    五.大文本型

    前面讲到mysql中一行数据的大小有限制,所以如果要存入大篇幅的文章,就要引入大文本型
    TINYTEXT 0-255字节 短文本字符串
    TEXT 0-65535字节 长文本数据
    MEDIUMTEXT 0-16777215字节 中等长度文本数据
    LONGTEXT 0-4294967295字节 极大文本数据
    注意点:
    大文本类型在表中并不会实际占用所能保存的字节数, 而是利用10个字节引用了实际保存数据的地址
    create table if not exists stu13(
    cls char(2),
    name LONGTEXT #不会报错, 因为没有超过一行的总大小
    )charset=gbk;

    6.枚举类型

    和编程开发中一样, 如果某个字段只能是固定的几个取值,并且只能是其中一个取值, 那么就可以使用枚举
    和编程开发中一样, MySQL中的枚举类型本质也是整型, 但是是从1开始的
    和编程开发中一样, 既然本质是整型, 所以就可以设置整型数据
    create table if not exists stu14(
    cls char(2),
    gender enum('男', '女', '妖')
    );
    insert into stu14 values(null, '未知'); #会报错, 只能设置枚举中列举的值
    insert into stu14 values(null, '男');
    insert into stu14 values(null, '女');
    select gender+0 from stu14;
    insert into stu14 values(null, 1); #插入整型, 但是也必须在范围内

    7.集合类型

    和编程开发中一样, 如果某个字段只能是固定的几个取值,并且可以是其中某几个取值, 那么就可以使用集合类型
    create table if not exists stu15(
    cls char(2),
    hobby set('篮球', '足球', '棒球', '足浴')
    );
    insert into stu15 values(null, '高尔夫'); #会报错, 只能设置集合中列举的值
    insert into stu15 values(null, '足球'); #插入一个值
    insert into stu15 values(null, '足球,篮球'); #插入多个值
    注意点: MySQL中的集合本质也是整型
    insert into stu15 values(null, '篮球'); #1
    insert into stu15 values(null, '足球'); #2
    insert into stu15 values(null, '棒球'); #4
    insert into stu15 values(null, '篮球,足球,棒球'); #7
    select hobby+0 from stu15;
    底层的计算公式是2(n), n从0开始
    2(0) === 1;
    2(1) === 2;
    2(2) === 4;
    1 === 0001
    2 === 0010
    4 === 0100

    8.日期类型

    date ,time,datetime

    9.布尔类型

    注意: MySQL不支持真正的布尔类型, 由于MySQL是用C/C++编写的, 所以非零即真
    和C语言一样, ture===1 , false===0
    create table if not exists stu17(
    id int auto_increment primary key,
    field1 boolean,
    field2 boolean
    );
    insert into stu17 values (null, true, false);非零即真

    相关文章

      网友评论

          本文标题:mysql 数据类型(一)

          本文链接:https://www.haomeiwen.com/subject/gkrayctx.html