数据类型

数据类型

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。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容