MySQL基础(十四)——数据类型

本文是MySQL学习笔记,总结了其数据类型。MySQL数据类型表明数据属性,常见类型可分类,包括数值(整型、小数)、字符、日期型等。不同类型有各自特点和使用注意事项,如整型范围、小数精度、字符类型选择、日期类型差异等。

本篇文章主要是对MySQL学习时的一些总结,作为学习笔记记录。

数据类型

mysql中的数据与C/C++中的数据类型,都有其内部定义的数据类型,数据类型表明了该类型下数据的属性和性质。

分类

数值型整型 
小数定点数
浮点数
字符型较短的文本char,varchar
较长的文本text,blob(较长的二进制数据)
日期型 

对于mysql中常见的数据类型大致可以按照上表进行分类,但除此之外也存在其它数据类型,如位类型,enum类型,set类型等。

数值类型

整型

整数类型字节范围
Tinyint1有符号:-128~127
无符号:0~255
Smallint2有符号:-32768~32767
无符号:0~65535
Mediumint3有符号:同理
无符号:同理
Int,integer4有符号:同理
无符号:同理
Bigint8有符号:同理
无符号:同理

对于整型来说,有以下几点需要注意:

  • 如果没有显式说明无符号还是有符号,则默认是无符号,如果想要设置有符号,则需要添加signed关键字
  • 如果插入的数值超出了整型的范围,会产生out of range异常,并且插入数值会转变为接近的临界值
  • 如果不设置长度,则会有默认的长度(此处的长度代表了显示的最大宽度,如果不够会用0在左边填充,但此时必须搭配zerofill使用)
DROP TABLE IF EXISTS int_info ;


CREATE TABLE int_info (
  t1 TINYINT (7) ZEROFILL,
  t2 TINYINT (7) SIGNED
) ;


INSERT INTO int_info VALUES(0,-128);

INSERT INTO int_info VALUES(255,127);

INSERT INTO int_info VALUES(-1,-129);

INSERT INTO int_info VALUES(256,128);

小数

对于浮点数来说:

浮点数类型字节范围
float(M,D)4很大
double(M,D)8

很大

对于定点数来说:

定点数类型字节范围
DEC(M,D)M+2最大取值范围与double相同,给定decimal的有效取值范围由M和D决定
DECIMAL(M,D)

需要注意:

  • M表示整数部分位数+小数部分位数,D表示小数部分位数,如果超过范围,则插入临界值
  • M和D都可以省略
    • 如果是decimal,则M默认为10,D默认为0
    • 如果是float和double,则会根据插入的数值的精度来决定精度
  • 定点型的精确度更高,如果要求插入数值的精度较高(货币运算等)时,可以考虑使用
  • 在建表时,为了存储方便和节约内存,所选择的类型在满足使用的条件下越简单越好,数据类型字节长度越小越好
DROP TABLE IF EXISTS float_info ;


CREATE TABLE float_info (f1 FLOAT, f2 DOUBLE, f3 DECIMAL) ;


INSERT INTO float_info VALUES(123.4523,123.4523,123.4523);
                           
INSERT INTO float_info VALUES(123.456,123.456,123.456);
                           
INSERT INTO float_info VALUES(123.4,123.4,123.4);

INSERT INTO float_info VALUES(1523.4,1523.4,1523.4);

字符型

对于字符型来说,有多种方式可以选择:

  • 对于较短的文本,可以使用char,varchar
  • binary和varbinary用于保存较短的二进制
  • enum用于保存枚举
  • set用于保存集合
  • 对于较长的文本,可以使用text,blob(较大的二进制)

常用的字符类型一般为char和varchar,主要差别为:

字符类型写法M含义特点存储消耗效率
charchar(M)最大的字符数,可以省略,默认为1固定长度的字符比较耗费
varcharvarchar(M)最大的字符数,不可以省略可变长度的字符比较节省

对于enum和set类型来说,其使用方法为:

# enum类型用法
DROP TABLE IF EXISTS enum_info;


CREATE TABLE enum_info (e1 ENUM ('a', 'b', 'c'));


INSERT INTO enum_info VALUES('a');

INSERT INTO enum_info VALUES('b');

INSERT INTO enum_info VALUES('c');

INSERT INTO enum_info VALUES('d');

# set类型用法
DROP TABLE IF EXISTS set_info;


CREATE TABLE set_info (s1 SET ('a', 'b', 'c'));


INSERT INTO set_info VALUES('a');

INSERT INTO set_info VALUES('a,b');

INSERT INTO set_info VALUES('A,B,C');

INSERT INTO set_info VALUES('A,B,C,D');

日期型

对于日期型的数据来说:

  • date保存日期
  • time保存时间
  • year保存年份
  • datetime保存日期和时间
  • timestamp保存日期和时间
日期和时间类型字节最小值最大值
date41000-01-019999-12-31
datetime81000-01-01 00:00:009999-12-31 00:00:00
timestamp4197001010800012038年的某个时刻
time3-838:59:59838:59:59
year119012155

而对于同样可以表示日期和时间的datetime和timestamp来说,也存在着区别:

日期类型字节范围时区影响
datetime81000-01-01 00:00:00~9999-12-31 00:00:00不受
timestamp419700101080001~2038年的某个时刻
DROP TABLE IF EXISTS time_info;


CREATE TABLE time_info (t1 DATETIME, t2 TIMESTAMP);


INSERT INTO time_info VALUES(NOW(),NOW());

SELECT * FROM time_info;

SHOW VARIABLES LIKE 'time_zone';

SET time_zone = '+9:00';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值