• MySql数据类型


     

    1.1.1. Int类型

    类型

     

    字节

    最小值

    最大值

     

     

     

    (带符号的/无符号的)

    (带符号的/无符号的)

    TINYINT

     

    1

    -128

    127

     

     

     

    0

    255

    SMALLINT

     

    2

    -32768

    32767

     

     

     

    0

    65535

    MEDIUMINT

     

    3

    -8388608

    8388607

     

     

     

    0

    16777215

    INT

     

    4

    -2147483648

    2147483647

     

     

     

    0

    4294967295

    BIGINT

     

    8

    -9223372036854775808

    9223372036854775807

     

     

     

    0

    18446744073709551615

    1.1.1.1. 有无符号

    在项目中主键使用BIGINT,而且是有符号的(因为无符号的运算时出现负数会报错)。

    演示

    create table test_unsigned(a int unsigned, b int unsigned);

    insert into test_unsigned values(1, 2);

    select b - a from test_unsigned;  --运行正常

    select a - b from test_unsigned;  --运行出错

    1.1.1.2. INT(N)是什么?

    演示(需要在Linux上才能看出区别)

     create table test_int_n(a int(4) zerofill);

     insert into test_int_n values(1);

     insert into test_int_n values(123456);

       ---结果,都能插入成功

    l int(N)中的 N 是显示宽度, 不表示 存储的数字的 长度 的上限。

    l zerofill 表示当存储的数字 长度 < N 时,用 数字0 填充左边,直至补满长度 N

    当存储数字的长度 超过N时 ,按照 实际存储 的数字显示

    1.1.1.3. 自动增长的面试题

    这列语法有错误吗?

     create table test_auto_increment(a int auto_increment);

         ---插入报错(非主键,不能自增)

     create table test_auto_increment(a int auto_increment primary key);

         ---插入成功,主键能自增

    以下结果是什么?

    insert into test_auto_increment values(NULL); 

      --插入成功,值:1

    insert into test_auto_increment values(0);  

      --插入报错(不能插入0)

    insert into test_auto_increment values(-1); 

      --插入成功,值:-1

    insert into test_auto_increment values(null),(100),(null),(10),(null)   

      --  1,100,101,10,11      (从上一条数据の数据值+1  递增)

    1.1.2. 字符类型(除了char跟vachar是字符,其余都是字节)

    类型

    说明

    N的含义

    是否有字符集

    最大长度

    CHAR(N)

    定长字符

    字符

    255

    VARCHAR(N)

    变长字符

    字符

    16384

    BINARY(N)

    定长二进制字节

    字节

    255

    VARBINARY(N)

    变长二进制字节

    字节

    16384

    TINYBLOB(N)

    二进制大对象

    字节

    256

    BLOB(N)

    二进制大对象

    字节

    16K

    MEDIUMBLOB(N)

    二进制大对象

    字节

    16M

    LONGBLOB(N)

    二进制大对象

    字节

    4G

    TINYTEXT(N)

    大对象

    字节

    256

    TEXT(N)

    大对象

    字节

    16K

    MEDIUMTEXT(N)

    大对象

    字节

    16M

    LONGTEXT(N)

    大对象

    字节

    4G

    1.1.2.1. 排序规则(ci跟bin)

      当创建一个utf-8_ci排序规则的数据库,插入数据a、A执行下面操作:

        select 'a' = 'A';  

          --结果:1   (数据库中用1和0表示true跟false)

      create table test_ci (a varchar(10), key(a));

      insert into test_ci values('a');

      insert into test_ci values('A');

      select * from test_ci where a = 'a';   --结果是什么?

        --结果:a、A都显示出来了

      重新设置当前字符排序规则后,再执行where a = 'a' ....

      set names utf8mb4 collate utf8mb4_bin

         --结果:只有a显示

    总结:MySQL中ci排序规则不区分大小写,bin排序规则区分大小写(转换成二进制比较)

    1.1.3. 时间类型

    日期类型

    占用空间

    表示范围

    DATETIME

    8

    1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    DATE

    3

    1000-01-01 ~ 9999-12-31

    TIMESTAMP

    4

    1970-01-01 00:00:00UTC ~ 2038-01-19 03:14:07UTC

    YEAR

    1

    YEAR(2):1970-2070, YEAR(4):1901-2155

    TIME

    3

    -838:59:59 ~ 838:59:59

    datatimetimestamp区别

    create table test_time(a timestamp, b datetime);

    insert into test_time values (now(), now());

    select * from test_time;

    select @@time_zone;

    set time_zone='+00:00';

    select * from test_time;

    datatime与timestamp区别:

      1.timestamp有时区的概念。(存储时会转成MySQL默认时区存储,取值时会反转成服务器当前设置的时区时间显示)

         datetime没有时区的概念。(存值是啥,取值就是啥)

      2.timestamp占4个字节,也决定了它的最大存值时间是2038年(2038年之后的时间不能存放)

         datetime占8个字节,最大存值到9999年

      3.timestamp存值,默认是数据库当前时间,更新时也是取当前时间

         datetime存值,默认是null

  • 相关阅读:
    详解java并发原子类AtomicInteger(基于jdk1.8源码分析)
    可见性、原子性和有序性
    Django基础之简单的前后端交互
    JDK1.8新特性之(三)--函数式接口
    JDK1.8新特性之(一)--Lambda表达式
    JDK1.8新特性之(二)--方法引用
    在IDEA创建类时自动创建作者日期等信息设定
    用batch调用DB2 CLPPlus执行多个SQL文
    windows7 设定开关机事件
    Mybatis显示修改数据库成功,数据库却没有修改
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/11037563.html
Copyright © 2020-2023  润新知