MySQL数据类型及使用场景
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数据类型及使用场景的更多相关文章
- mysql 数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) ...
- 详解MySQL数据类型
原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言 很久没写文章,也有博友在我的有些文章中留言,希望我可以写一些文章,公司项 ...
- mysql数据库从删库到跑路之mysql数据类型
一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...
- MySQL 数据类型(Day41)
一.介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的高度,但宽度是可选的. mysql数据类型概览 #1.数字:(默认都是有符号,宽度指的是显示宽度,与存储无关) ...
- Python 3 mysql 数据类型
Python 3 mysql 数据类型 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/m ...
- MySQL数据类型与操作
内容提要: 建表完整语法规范(create table 表格(字段名1 类型 (宽度) 约束条件)) MySQL数据库数据类型(整型.浮点型.字符类型(char与varchar).日期类型.枚举与集合 ...
- Redis 数据类型及应用场景
一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyperloglog 提供了 AOF 和 R ...
- MySQL 数据类型简介 创建数据表及其字段约束
数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...
- MySQL数据类型的最优选择
MySQL数据类型的最优选择 慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下: ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下) ● 计算.进而 ...
随机推荐
- EXCEL中统计单元格内容出现次数
参考网站: https://jingyan.baidu.com/article/7c6fb428dfcc9580642c90ae.html 统计单元格内容出现次数是工作中经常会涉及到的问题. 那么,如 ...
- PostMessage实现多窗口之间的数据传递
[本文参考自网络,参考地址:https://blog.csdn.net/lsyyoyo/article/details/38726419] 1.在公共的头文件中添加一个宏定义: #define WM_ ...
- 10款流行的Markdown编辑器,总有一款适合你
摘要:作为一个开源人,如果你不会使用Markdown语法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 设计和开发的纯文本格式的语法,非常的简单实用. 作为一个开源 ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- PLSQLDeveloper_免安装自带client
PLSQLDeveloper_解压版 免安装并且自带有client客户端. 要安装解压附带的readme.txt进行配置. 一. 目录结构 D:\install\PLSQL |-- instantcl ...
- js 迭代 方法
在js 中,有一些方法, 可以很方便的遍历出数据,不用进行for循环就可以,是怎么实现的呢? 例如:在javascript 中的forEach 方法:打印一个数组的索引和项目: 1. forEach ...
- CSS GRID ESSENTIALS
CSS GRID ESSENTIALS Review At this point, we've covered a great deal of different ways to manipulate ...
- Servlet基本
1.Webサーバ設定の「ディレクトリ一覧」機能 Webサーバの設定で「ディレクトリ一覧」機能を有効にすると.404 Not Found画面ではなく.ディレクトリ以下のファイルの一覧が表示されます.この ...
- C#实现联合体
[StructLayout(LayoutKind.Explicit, Size = )] public struct TypeTransform { [FieldOffset()] public fl ...
- Linux用户名、用户组的相关命令
whoami 查看当前登录用户 id 用户名 查看用户名的id 及所属组 groups 查看当前登录用户的所有所属组 groups 用户名 查看指定用户的所有所属组 cat /etc/passwd ...