美文网首页
数据类型

数据类型

作者: 赵桓熠_科院 | 来源:发表于2019-07-25 19:39 被阅读0次

数据类型

01整型

类型 字节 范围(有符号) 范围(无符号)
TINYINT 1 -27~27-1 0~28-1
SMALLINT 2 -215~215-1 0~216-1
MEDIUMINT 3 -223~223-1 0~224-1
INT 4 -231~231-1 0~232-1
BIGINT 8 -263~263-1 0~264-1

关于范围的计算方法:比如tinyint,有1个字节,一个字节是8位。计算有符号的范围,8位有一个是符号位,剩下的7位每一位有0和1两种取值,代表2的7次方128个数,正数128,负数128个。但是为了取出一个0,正数就少了1。所以是127个正数和一个零。无符号计算,1字节有8位,代表2的8次方256个数,就是从0~255。其他同理。

小知识:

  1. 如果你定义一个字段的数据类型是int(3)那么是不是说,插入的数据最大不能超过三位数呢?

    其实不是的,你仍然可以插入更大的数,最大范围仍是上表中int的范围没有变。int(3)中的3是显示位数,意思是查询时,显示3位数,不足三位补零,若想最前面的零也显示,要配合关键词zerofill的使用。

    例如:定义score时 score int(3) zerofill

  2. 无符号数据类型怎么定义?

    比如声明score时 score int unsigned

02浮点型

浮点型 占用字节 范围
float(单精度) 4 -3.4E+38~3.4E+38
double(双精度) 8 -1.8E+308~1.8E+308

浮点数声明:

float(M,D)

double(M,D)

​ M:总位数。插入的值总位数超过M会报错。

​ D:小数位数,插入的值小数位数超过D不会报错,四舍五入处理。

注意点:浮点型存的是近似值,精度有可能会丢失。例:

create table nu(
num double(20,19)
);

insert into values (1.1234567890123456789);

select * from nu ;#你会发现数变了,最后几个变成了0

03定点数

decimal(M,D)

说明:

  1. 定点数用于保存你要严格保存的数据,精度不会丢失,例如存款。
  2. 定点数是变长的,大概每9个数字用4个字节来存储,定点之所以能保存精确的小数,是因为整数和小数是分开储存的,占用资源要比浮点数多。
  3. 整型、定点数和浮点数都支持显示宽度(zerofill)和无符号数(unsigned)

04字符型

数据库中,所有字符型只能用单引号。

数据类型 描述 长度
char(长度) 定长 最大255
varchar(长度) 变长 最大65535
tintext 大段文本 28-1=255
text 大段文本 216-1=65535
mediumtext 大段文本 224-1
longtext 大段文本 232-1
  1. char(10)和varchar(10)的区别?

    答:相同点:他们最多只能保存10个字符。

    ​ 不同点:char不回收多余的长度(定长),效率高,浪费空间;

    ​ varchar回收对于的空间(变长),效率低,节省空间。

  2. varchar理论最大长度是65535字节,实际却达不到,具体长度与字符编码有关。

    例gbk编码 , 一个字符占用2字节 , 则varchar最大长度是32767.

    utf8编码中 , 一个字符占用3字节 , 则varchar最大长度是21845

  3. 一条完整数据(比如一个表有id,姓名,性别。三者合在一起算一条完整数据)总长度不能超过65535字节。验证:

    create table t7(
    name varchar(21844), #utf8下最多能存21845字符,每个字符3字节
    age tinyint 
    ) charset = utf8;
    

    上述例子会报错,是因为utf8下,varchar最大存21845字符(65535字节),外加tinyint,字节总长度超过了65535,所以会报错。

  4. 保存大块文本用了text,总数据长度不就超过了65535字节了?为什么不报错?

    答:事实上,大块文本(text)不计算在总长度中,一个大块文本只用10个字节保存文本地址,文本另存他处。

05枚举

enum('A','B')

声明举例:sex enum('男 ','女 ')

说明:

  1. 枚举相当于一个集合,值只能从集合中选一个,值选非集合内的会报错。

  2. 枚举类型是通过整数来管理的,第一个值是1,第二个值是2,以此类推。验证与应用:

    create table t8(
    name varchar(10),
    sex enum('男','女')
    );
    # --------------------
    insert into t8 values 
    ('Tom','男'),
    ('Jerry',1),   # 与第七行等效
    ('Rose','女');
    # --------------------
    #再次表明枚举是数字,只有数字才能相加,结果也是数字。
    

select sex+0 from t8;
select sex from t8;


3. 枚举的优点:

1. 运行速度快(数字比字符串运算速度快)。
2. 限制数据。
3. 节省空间(一个数字就够了,省空间)。

## 06集合

> set 
>
> set('爬山 ','游泳 ','读书 ')

集合相当于多项选择;**每一个集合都分配一个固定的数字,分配方式从左往右,按2^0^ , 2^1^ , 2^2^ , 2^3^**……例子中,爬山是2^0^=1;游泳是2^1^=2;读书是2^2^=4。如果你插入时,选择了爬山和读书,那么结果就是5(4+1)。

例子:

```mysql
create table t9(
hobby set('爬山','游泳','读书')
);
# 证明是数字
insert into t9 values ('爬山','读书');
select hobby+0 from t9;

无论按照什么顺序插入,其显示结果都是按照建表时的固定顺序显示的,例如你插入时 insert into t9 values ('读书','爬山');,但是显示结果仍然是你建表时的顺序,先显示“爬山”,再显示“读书”。

07日期类型

数据类型 占用字节 描述
datetime 8 日期时间
date 3 日期
time 3 时间
timestamp 4 时间戳
year 1 年份

一般比较常用的也就前两个。

datetime的插入格式:

insert into uu values ('2015-10-12 10:00:00');
# 日期与时间插入,在上面括号内的基础上取你所需。

注意点:

  1. timestamp类型和datetime类型的形式是一样的,区别是datetime的范围是1~9999年,而timestamp是从1970-01-01 00:00:00 ~ 2038-1-19 11:14:07
  2. year只占用一个字节,所以只能储存255个年份,范围是1901 ~ 2155。
  3. time表示时间或时间间隔,范围是 -838:59:59 ~ 838:59:59。
  4. 其他编程语言的时间戳与数据库的时间戳有区别,其他编程语言时间戳是从1970年1月1日0时0分0秒到现在的总秒数或总毫秒数,是整数。但是数据库时间戳不是秒数,形式与datatime差不多,有日期,时分秒。

08布尔型

boolean型中true和false对应0和1;以数字的方式储存。

09数据类型小测试

  1. 手机号:char
  2. 电话号:varchar
  3. 性别:char enum
  4. 学生年龄:tinyint unsigned
  5. 薪水:dicimal
  6. 照片:binary,但一般不把照片存数据库,如果照片几百兆,数据库才几百兆,数据库直接就满了。一般在数据库存照片地址。但出题这样出,还是要选binary。

相关文章

  • JAVA 之路第一讲

    数据类型: 基础数据类型 包装器数据类型 引用数据类型 null 数据类型 基础数据类型: 整型 byte(字节型...

  • php 数据类型和数据类型转化

    一、数据类型 基础数据类型 复合数据类型 特殊数据类型 二、获取数据类型 三、打印数据类型和值 四、数据类型判断 ...

  • OC和C中的数据类型

    数据类型对比 C语言数据类型C语言数据类型 OC数据类型

  • JAVA 核心笔记 || [2] 数据类型

    JAVA数据类型分为两大数据类型: 1.内置数据类型2.引用数据类型 内置数据类型 引用数据类型 上篇 : 开篇 ...

  • 数据类型

    数据类型作用:数据类型不同,空间大小不同。 数据类型分类:基本数据类型、引用数据类型基本数据类型:整数型、浮点型、...

  • Java知识之数据类型

    Java数据类型图表## Java数据类型分为:### 基础数据类型 引用数据类型 null类型 基础数据类型分別...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • Java数据类型(慢慢积累,对于事物的理解也会不一样)

    Java的数据类型: 1. 内置数据类型(基本数据类型); 2. 引用数据类型; Java基本数据类型:(...

  • 【IOS 开发】 数据类型详解

    1. 数据类型简介及输出 (1) 数据类型简介 数据类型简介: Object - C 数据类型 分为 基本数据类型...

  • iOS 数据类型简介及输出

    一、数据类型简介及输出 1.数据类型简介 数据类型简介 : Object - C 数据类型 分为 基本数据类型, ...

网友评论

      本文标题:数据类型

      本文链接:https://www.haomeiwen.com/subject/scykrctx.html