码迷,mamicode.com
首页 > 数据库 > 详细

MySql数据类型

时间:2019-06-17 00:34:29      阅读:129      评论:0      收藏:0      [点我收藏+]

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

 

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

MySql数据类型

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

原文地址:https://www.cnblogs.com/Soy-technology/p/11037563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!