SQL中常见的数据类型


目录

  • 概述
  • 一、整型
  • 分类
  • 特点
  • 二、小数
  • 分类
  • 特点
  • 三、字符型
  • 四、日期型
  • 分类
  • 特点


概述

  1. 数值型
    整数:整型
    小数:定点数、浮点数
  2. 字符型
    较短的文本:char、varchar
    较长的文本:text、blob(用于保存较长的二进制数据,例如图片)
  3. 日期型

一、整型

分类

tinyint(1个字节)、smallint(2个字节)、mediumint(3个字节)、int/integer(4个字节)、bigint(8个字节)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLSdR2si-1676519414338)(DataType%int.PNG)]
注:它们的区别仅仅在于可保存的数值范围

特点

  1. 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加关键字unsigned
  2. 如果插入的数值超出了范围,会报Out of range异常,并且插入的值是该数值型存储范围的临界值
  3. 如果不设置长度,会有默认的长度
  4. 长度代表了显示的最大宽度,如果数值本身不够的话会用0在左边填充,但必须搭配关键字zerofill来使用
  • 如何设置有符号和无符号
drop table if exists tab_int;
create table tab_int(t1 int,t2 int unsigned);#有符号
desc tab_int;
insert into tab_int values(-8,-8);
select * from tab_int;#显示-8 0
  • Out of range问题
insert into tab_int values(2147483648,4294967296);
select * from tab_int;
  • 设置长度
    注:加了关键字zerofill,左边填补的0才会显示出来,并且如果使用了zerofill,则必须是无符号整数(不然报错)
drop table if exists tab_int;
create table tab_int(t1 int,t2 int unsigned,t3 int(7),t4 int(7) zerofill);
select * from tab_int;
insert into tab_int values(-8,123456,12,12);

二、小数

分类

  1. 浮点型
    float(M,D)
    double(M,D)
  2. 定点型
    dec(M,D)
    decimal(M,D)

特点

  • M:整数位数+小数位数
    D:小数位数
    如果超过范围,则插入临界值
  • M和D都可以省略
    如果是decimal,则默认M为10,D为0
    如果是float和double,则会根据插入的数值的精度来决定精度
  • 定点型的精度较高,如果要求插入数值的精度较高如货币运算等则可以考虑使用,否则一般考虑使用float
  • 原则:
    所选择的类型越简单越好,能保存的数值的类型越小越好

测试特点
(1)M与D的含义

create table tab_float(f1 float(5,2),f2 double(5,2),f3 decimal(5,2));
desc tab_float;
select * from tab_float;
insert into tab_float values(123.43,123.43,123.43);

SQL SERVER中的图片数据类型 sql照片数据类型_sql

insert into tab_float values(223.432,223.432,223.432);

SQL SERVER中的图片数据类型 sql照片数据类型_整型_02

insert into tab_float values(323.4,323.4,323.4);

SQL SERVER中的图片数据类型 sql照片数据类型_整型_03

insert into tab_float values(4323.4,4323.4,4323.4);#整数位超出了3

SQL SERVER中的图片数据类型 sql照片数据类型_整型_04

(2)省略M与D

drop table if exists tab_float;
create table tab_float(f1 float,f2 double,f3 decimal);
desc tab_float;

SQL SERVER中的图片数据类型 sql照片数据类型_临界值_05

三、字符型

确切地,应该称为串数据(包含文本型和二进制)

较短的文本(重点介绍):

  1. char 与varchar

    特点:

写法

M的意思

特点

空间的耗费

效率

char

char(M)

最大的字符数,可以省略,默认为1

固定长度的字符

比较耗费

稍高

varchar

varchar(M)

最大的字符数,不能省略

可变长度的字符

比较节省

稍低

例:如果要存储性别字段,建议使用char,如果是家庭住址字段,建议使用varchar。

  1. binary和varbinary类型
    类似于char和varchar可以用于保存较短的二进制字符串
  2. enum枚举类型
  3. set集合类型

较长的文本:
text、blob

案例:枚举类型的设置

create table tab_char(c1 enum('a','b','c'));
desc tab_char;
insert into tab_char values('a');
insert into tab_char values('b');
insert into tab_char values('c');
insert into tab_char values('d');#报错,插入失败
insert into tab_char values('A');#不区分大小写
select * from tab_char;

SQL SERVER中的图片数据类型 sql照片数据类型_sql_06

create table tab_set(s1 set('a','b','c','d'));
insert into tab_set values('a');
insert into tab_set values('a,b,c');
insert into tab_set values('A,B,B');
insert into tab_set values('a,b,c,d');
drop table if exists tab_set;
select * from tab_set;

SQL SERVER中的图片数据类型 sql照片数据类型_SQL SERVER中的图片数据类型_07

四、日期型

分类

date 只保存日期
time 只保存时间
year 只保存年

datetime 保存日期+时间
timetamp 保存日期+时间

特点

字节

范围

时区等的影响

datetime

8

1000-9999

不受

timestamp

4

1970-2038


timestamp比较容易受时区、语法模式和版本的影响,更能反映当前时区的真实时间

案例:关于datetime与timestamp

create table tab_datetime(d1 datetime,d2 timestamp);
insert into tab_datetime values(now(),now());

SQL SERVER中的图片数据类型 sql照片数据类型_SQL SERVER中的图片数据类型_08

set time_zone='system';
show variables like 'time_zone';
set time_zone='+9:00';#修改一下时区,将东八区修改为东九区 
select * from tab_datetime;

SQL SERVER中的图片数据类型 sql照片数据类型_SQL SERVER中的图片数据类型_09