输入banner图图片脚本导航/分类

MySql数据类型

类型

 

字节

最小值

最大值

 

 

 

(带符号的/无符号的)

(带符号的/无符号的)

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

l 当存储数字的长度 超过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

 

datatime与timestamp区别

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

MySql数据类型

标签:amp   pac   sql   运算   排序   names   服务   最小   区别