MySQL数据类型介绍

整数类型

类型名称 说明 存储需求 取值范围有符号 取值范围符号
TINYINT 很小的整数 1个字节 -128~127 0-255
SMALLINT 小的整数 2个字节 32768~32767 0-65535
MEDIUMINT 中等大小的整数 3个字节 -8388608~8388607 0-16777215
INT(INTERGER) 普通大小的整数 4个字节 -2147483648 0-4294967295
BIGINT 大整数 8个字节 -9223372036854775808~9223372036854775807 0-18446744073709551615
CREATE TABLE tb_empl
(
id INT(11)
)
上面的11指的是这个字段中数据数字显示的宽度,与取值范围是无关的。
数值的位数小于指定宽度时会由空格填充,如果大于显示宽度,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。显示宽度只用于显示,不能限制取值范围和占用空间

浮点类型

类型名称 说明 存储需求 取值范围有符号 取值范围符号
FLOAT 单精度浮点 4个字节 -3.402823466E+38~-1.175494351E-38 0和1.175494351E-38~3.402823466E+38
DOUBLE 双精度浮点 8个字节 -1.7976931348623157E-308~1.7976931348623157E+308 0和2.2250738585072014E-308~1.7976931348623157E+308
DECIMAL(M,D) 压缩的'严格'定点数,就是指定了小数点后几位 M+2个字节
注意不论是定点还是浮点类型,如果指定的精度超出范围,则会四舍五入进行处理。

日期与时间类型

类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901-2155 1个字节
TIME HH:MM:SS -838:59~838:59:59 3字节
DATE YYYY-MM-DD 1000-01-01~9999-12-3 3字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC~2038-01-19 4字节

文本字符串类型

类型名称 说明
CHAR 固定长度非二进制字符串
VARCHAR 变长非二进制字符串
TINYTEXT 非常小的非二进制字符串
TEXT 小的非二进制字符串
MEDIUMTEXT 中等大小的非二进制字符串
LONGTEXT 大的非二进制字符串
ENUM 枚举类型,只能有一个枚举字符串
SET 一个设置,字符串对象可以有零个或多个SET成员

CHAR为固定长度字符串

VARCHAR是长度可变的字符串

如何选择数据类型

整数和浮点数

需要小数部分,则使用浮点数类型,列入值的范围为1-99999,若使用整数,则MEDIUMINT UNSIGNED是最好的类型,若需要存储小数,则使用FLOAT类型。
浮点类型包括FLOAT和DOUBLE类型,DOUBLE类型精度比FLOAT类型高,因此,如果要求存储精度较高时,应该选择DOUBLE类型。

浮点数和定点数

浮点数FLOAT、DOUBLE相对于定点数DECIMAL的优势是:在一定长度情况下,浮点数能表示更大的数据范围,但是由于浮点数容易产生误差,因此精度高时,建议使用DECIMAL来存储。

日期与时间类型

如果只记录时间,TIME类型
如果记录日期和时间 TIMESTAMP和DATETIME
TIMESTAMP类型当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列值设为当前的时间。
CREATE TABLE test1
(
names VARCHAR(20),
times TIMESTAMP NOT NULL DEFAULT NOW()
)

CHAR和VARCHAR之间的特点与选择

CHAR是固定长度字符,VARCHAR是可变长度字符
CHAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格
CHAR处理速度快,但是缺点就是浪费存储空间
  • 对于MyISAM 使用CHAR可以整个表静态化,从而使数据检索更快,用空间换时间。
  • 对于InnoDB使用VARCHAR,因为它的存储格式不分固定长度和可变长度,VARCHAR比较节省空间

ENUM和SET

  • ENUM只取单值,但要注意,他的索引是从1开始,加了引号就是值,不加就是索引。

  • 设定enum的格式:

    • enum("选项1","选项2","选项3",...);
    • 实际上,enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项
    • 加了引号
    CREATE TABLE `enum2tinyint` (
    `switchs` enum('none','success','fail','delete','skip','1') DEFAULT NULL,
    `switch` tinyint(1) NOT NULL,
    KEY `switchs` (`switchs`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES ('1', '1');
    1 1
    • 不加引号
    INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES (1, '1');
    none 1
    INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES (2, '1');
    success 1
  • 设定set的格式:

    • set("选项1","选项2","选项3",...)

    • 同样的,set的每个选项值也对应一个数字,依次是1,2,4,8,16...,最多有64个选项

    create table enum_set_table(
    id int auto_increment primary key,
    hobby set('music','movie','swimming','footbal')
    ) #15=1+2+4+8 <=> 'music,movie,swimming,footbal' */
    insert into enum_set_table(id,hobby) values(null,15);
    # 等同于
    insert into enum_set_table(id,hobby) values(null,'music,movie,swimming,footbal');

BLOB和TEXT

  • BLOB是二进制字符串

    • 主要用于存储图片,音频信息
  • TEXT是非二进制字符串

    • 只能存储纯文本文件

MySQL数据类型及使用场景的更多相关文章

  1. mysql 数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  2. 详解MySQL数据类型

    原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言 很久没写文章,也有博友在我的有些文章中留言,希望我可以写一些文章,公司项 ...

  3. mysql数据库从删库到跑路之mysql数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  4. MySQL 数据类型(Day41)

    一.介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的高度,但宽度是可选的. mysql数据类型概览 #1.数字:(默认都是有符号,宽度指的是显示宽度,与存储无关) ...

  5. Python 3 mysql 数据类型

    Python 3 mysql 数据类型 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/m ...

  6. MySQL数据类型与操作

    内容提要: 建表完整语法规范(create table 表格(字段名1 类型 (宽度) 约束条件)) MySQL数据库数据类型(整型.浮点型.字符类型(char与varchar).日期类型.枚举与集合 ...

  7. Redis 数据类型及应用场景

    一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyperloglog 提供了 AOF 和 R ...

  8. MySQL 数据类型简介 创建数据表及其字段约束

    数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...

  9. MySQL数据类型的最优选择

    MySQL数据类型的最优选择   慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下:            ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下)      ● 计算.进而 ...

随机推荐

  1. Java命令运行.class文件

    class使用全名(点号间隔):java headfirst.designpatterns.proxy.gumball.GumballMonitorTestDrive

  2. GPUImage中对比度调整的实现——GPUImageContrastFilter

    对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,图像越鲜亮,差异范围越小代表对比越小,图像越灰. GPUImage中实现了对比度调整的Filter,其 ...

  3. UEditor 在ie中报console未定义解决方案

    解决办法:                  1.注释掉该代码               2.或者加入如下代码即可,本人已经测试过,没有问题. window.console = window.con ...

  4. 【ASP.NET 进阶】TreeView控件学习

    这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...

  5. 如何轻松干掉svd(矩阵奇异值分解),用代码说话

    svd我认识我机器学习里面最扯淡的玩意了.尼玛.老实说,好多机器学习的书老是在扯svd有多高端,然后看了netflix电影推荐大赛,哇塞,冠军队就是用svd+做的.然后狠狠的下载了所有他们的论文,硬是 ...

  6. Android编程权威指南(第三版)- 2.8 挑战练习:添加后退按钮

    package com.example.geoquiz; import android.support.v7.app.AppCompatActivity; import android.os.Bund ...

  7. 缓存框架有使用过哪些?memcache和redis有什么区别?项目中,怎么去选择?

    缓存有:ehcache,memcache和redis等 区别: 1. Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等. ...

  8. 后台设计的基石:用户权限管理(RBAC)及工作流(workflow)模型

    后台产品同学在设计后台时,会发现一般后台的各个功能模块总结起来有两大类型:功能类.流程类.在设计功能或流程前都需要预判不同的使用角色对应不同权限,设计流程前则还得思考最基本的工作流原理. 用户权限是设 ...

  9. 机器学习-文本数据-文本的相关性矩阵 1.cosing_similarity(用于计算两两特征之间的相关性)

    函数说明: 1. cosing_similarity(array)   输入的样本为array格式,为经过词袋模型编码以后的向量化特征,用于计算两两样本之间的相关性 当我们使用词频或者TFidf构造出 ...

  10. intellijIDEA Spring配置文件提示: File is included in 4 contexts

    前提: 不影响编码,但是出现淡黄色的背景 解决办法: 打开Project Structure —> 选择Modules -> 选择Spring ->先点减号把之前的都删除掉 -> ...