目录
人们通过长期的学习,能够很轻松的识别除汉字,字符。可是计算机不能是别,于是人们在每一个计算机语言里都界定了数据类型,他可以是字符型、数值型、日期时间型还有混合型,有了这些数据类型,计算机很容易读取数据。在SQL中,数据类型是一个标签,是一个有利于SQL掌握每列中期望储存什么类型的数据的手册,它也标志了SQL怎样与储存的数据进行交互。SQL中常见的数据类型有多种,本文便介绍一下SQL中基本的数据类型。
一、数据类型
1.整数型
一般常见的整数的数据类型有int、smallint、mediumint、bigint。
数据类型 | 字节大小 | 范围(有符号) | 范围(无符号- unsigned) | 用途 |
TINYINT | 1 字节 | (-128,127) | (0,255) | 微小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 小整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 中等整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 大整数值 |
2.小数型
数据类型 | 字节大小 | 范围(有符号) | 范围(无符号- unsigned) | 用途 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点小数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点小数 |
float 和double都是表示小数,实际使用时,如果需要用到的数比较大,可以将数据类型定义为double,反之使用float;由于double消耗内存是float的两倍,double的运算速度比float慢得多,对于编程人员来讲,能用单精度时不用双精度;
还有一种定点数数据类型是decimal类型,他和double区别是decimal所能储存的数比double大,decimal精确度更高;
3.字符型
字符串类型 | 字节大小 | 描述及存储需求 |
CHAR | 0-255字节 | 定长字符串,如CHAR(10),定长10占位,不足补空格 |
VARCHAR | 0-255字节 | 变长字符串 ,如VARCHAR(10),最长10个字节,存储长度按照实际输入长度为准 |
TINYBLOB | 0-255字节 | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65535字节 | 二进制形式的长文本数据 |
TEXT | 0-65535字节 | 长文本数据 |
MEDIUMBLOB | 0-16777215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
VARBINARY(M) | M | 允许长度0-M个字节的变长字节符串,值的长度+1个字节 |
BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
1、字符串型数据,在sql语句中,需要用单引号或者双引号引起来,如果"张三","中国人";
2、char、varchar、text比较:
(1)经常变化的字段用varchar
(2)知道固定长度的用char
(3)尽量用varchar
(4)超过255字符的只能用varchar或者text
(5)能用varchar的地方不用text
(6)按照查询速度: char最快, varchar次之,text最慢。
3、binary和varbinary区别:
(1)binary类型的长度是固定的,在创建表时就指定了,实际数据长度不足最大长度的空间由‘\0’补全。举个例子,binary(50)就是指定binary类型的长度为50;
(2)varbinary类型的长度是可变的,在创建表时指定了最大长度;指定好了varbinary类型的最大值以后,其长度可以在0到最大长度之间。举个例子,varbinary(50)的最大字节长度是50,但是,不是每条记录的字节长度都是50。在这个最大值范围内,使用多少分配多少。varbinary类型实际占用的空间为实际长度加一。这样,可以有效的节约系统的空间;
4.日期时间型
类型 | 字节大小 | 范围 | 格式 |
DATE | 4字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD |
TIME | 3字节 | -838:59:59/838:59:59 | HH:MM:SS |
YEAR | 1字节 | 1901/2155 | YYYY |
DATETIME | 8字节 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4字节 | 1970/1/1 0:00 | YYYYMMDD HHMMSS |
这里只说datetime与timestamp区别:
datetime与timestamp都是日期和时间的混合类型,区别在于:
(1)表示的取值范围不同,datetime的取值范围远远大于timestamp的取值范围;
(2)将NULL插入timestamp字段后,该字段的值实际上是MySQL服务器当前的日期和时间;
(3)同一个timestamp类型的日期或时间,不同的时区,显示结果不同;
(4)insert、update、delete语句中,日期时间型数据,需要用引号(单引号或者双引号)引起来。
5.混合型
数据类型 | 数据说明 |
ENUM类型 枚举 | (1)ENUM类型是一个允许你输入可能值的列表; |
(2)在处理相互排拆的数据时容易让人理解,比如人类的性别; | |
(3)ENUM类型在系统内部可以存储为数字; | |
(4)一个ENUM 类型最多可以包含65536个元素,其中一个元素被MySQL保留; | |
SET类型 集合 | (1)SET数据是一个字符串对象,可以有零或多个值; |
(2)指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开; | |
(3)SET最多可以有64个不同的成员。 |
enum和set异同点:
mysql中的enum和set都是string类型,而且只能在指定的集合里取值, 不同的是,应用程序从数据库表中读取数据值时,set一次可以取多个值,enum每次只能取一个值。
二、选取数据类型的原则
选择合适的数据类型,不仅可以节省储存空间,还可以有效地提升数据的计算性能。
(1)在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型
(2)数据类型越简单越好
(3)在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间
(4)尽量采用精确小数类型(例如decimal),而不采用浮点数类型。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间,例如百分比使用decimal(4,2)即可。
(5)尽量避免NULL字段值【空值】,建表时建议将字段指定为NOT NULL约束。
你的点赞是对博主最大的鼓励
看完记得收藏~