mysql数据类型符号位_MySQL数据类型
学习《高性能MySQL》第4章,读书笔记。
选择数据类型的原则
更小的通常更好
尽量使用可以正确存储数据的最小的数据类型,因为这样会占用更少的磁盘、内存、CPU。
简单就好
简单数据类型的操作需要更少的CPU周期。
尽量避免NULL
当列中包含NULL时,会使得索引、索引统计和值的比较变得复杂。可以添加DEFAULT避免NULL。
整数类型
数据类型
字节数
带符号最小值
带符号最大值
不带符号最小值
不带符号最大值
TINYINT
1
-128
127
0
255
SMALLINT
2
-32768
32767
0
65535
MEDIUMINT
3
-8388608
8388607
0
16777215
INT
4
-2147483648
2147483647
0
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
0
18446744073709551616
MySLQ可以为整数类型指定宽度,例如INT(11),指定宽度对于值的范围没有影响。
INT(N),N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字,但这要整型设置了unsigned zerofill才有效。
create table int_width_test(
a int(5),
b int(5) UNSIGNED,
c int(5) ZEROFILL,
d int(5) UNSIGNED ZEROFILL,
e int(8) UNSIGNED ZEROFILL
) ENGINE=INNODB charset=utf8;
INSERT INTO int_width_test values(1,1,11111111,11111111,11111111);
INSERT INTO int_width_test values(1,1,1,1,1);
复制代码
实数类型
数据类型
字节数
备注
float
4
单精度浮点型
double
8
双精度浮点型
对于float、double有一个比较大的问题就是精度丢失。
原因很简单,其实在MySQL中对对于float类型的数据,只分配了32位的存储空间,对于double类型值分配了64位存储空间。当我们的数据转化为二进制时的存储空间大于32位或者64位,MySQL会将我们存储的数据从高位到低位进行截断。也就是说,当我们存储的空间小于32位或者64位时,数据是准确的,但是当我们存储的数据位数较多时,会出现数据不准确的现象。
对于这个问题,我们可以使用decimal的类型进行解决。
其实decimal可以解决精度丢失的原因:
更大的存储空间
通过字符串化或者其他的方式特殊存储起来
想要深入了解这一方面的读者,可以看我的第二篇参考文献。
字符串类型
CHAR和VARCHAR类型
VARCHAR类型存储可变长度字符串。
实现方式:需要额外的1或2个字节记录字符串的长度,如果长度小于或等于255字节,需要1字节记录。反之,需要2字节。
特点:节省空间,对于性能有帮助。但是需要注意的是,当行的长度变长时,需要进行额外的工作。
当行的长度变长时,MyISAM会将行拆成不同的片段存储,InnoDB需要分裂页使行可以放入内存。
适用场景:字符串的最大长度比平均长度大很多;列的更新很少。
CHAR类型存储定长字符串。
实现方式:MySQL会根据定义分配空间,存储的时候会删除字符串的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。
适用场景:很短的字符串,或所有值都接近一个长度。
BLOB和TEXT类型
BLOB和TEXT类型都是为存储很大的数据而设计的字符串数据类型。
BLOB类型存储的是二进制数据,没有排序规则或字符集。
TEXT类型存储的是字符串,有字符集和排序规则。
MySQL把BLOB和TEXT当作独立的对象处理。当BLOB和TEXT值太大时,InnoDB会使用专门的外部排序存储区域来存储,每个值在行内需要1~4个字节存储一个指针,在外部存储区域内存储实际的值。
当使用BLOB和TEXT列,在遇到使用临时表的情况时,无法使用内存临时表,只能在磁盘上创建临时表。这样会造成严重的性能开销,所以,尽量避免使用BLOB和TEXT类型。
使用枚举(ENUM)代替字符串类型
使用 MySQL ENUM作为列的数据类型
好处:
使得数据更紧凑进而节省空间。
更好的可阅读性。
缺点:
MySQL内部存储的是整数,如果使用数字作为ENUM枚举常量,容易混乱。
枚举字段按照内部存储的整数而不是定义的字符串进行排序。
枚举字段是固定的,添加或者删除字符串必须使用ALTER TABLE。
日期和时间
类型
字节
特征
DATETIME
8
与时区无关,时间范围:1000-01-01 00:00:00 to 9999-12-31 23:59:59
TIMESTAMP
4
与时区有关,时间范围:1970-01-01 00::00:01 to 2038-01-19 03:14:07
通常推荐使用TIMESTAMP,因为它比DATETIME空间效率更高。
参考文献
mysql数据类型符号位_MySQL数据类型相关推荐
- mysql约束条件整型_MySQL 数据类型(整型,浮点型,字符类型,日期类型,枚举和集合) 约束条件 自增...
存储引擎补充: 不同的应用软件处理不同类型的数据 MySQL5.5版本及以上默认的存储引擎为innodb innodb:支持行锁表锁,外键,事物,安全性更高,教myisam数据更安全 myisam:仅 ...
- mysql数据类型默认长度_mysql数据类型长度
1个字节= 8位 tinyint 为一个字节 2的8次方= 256 所以最多存储到256 日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 time ...
- mysql数据类型的验证_MYSQL数据类型详解
无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的.这就要求我们对数据库系统的常用数据类型有充分的认识.下面我就将我的一点心得写出来跟大家分享. 一.数字 ...
- mysql 体重 类型 身高_MySQL 数据类型
介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 mysql常用数据类型概括: #1. 数字: 整型:tinyint int bigint 小 ...
- mysql字段类型原理_mysql数据类型和字段属性原理与用法详解
本文实例讲述了mysql数据类型和字段属性.分享给大家供大家参考,具体如下: 本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长 ...
- mysql blob取值_MySQL 数据类型:
MySQL 数据类型: 字符型 数值型 日期时间型 内建类型 字符型: CHAR, BINARY:定长数据类型: VARCHAR, VARBINARY:变长数据类型:需要结束符: TEXT:TINYT ...
- mysql 地理空间支持_MySQL数据类型-地理空间数据类型
1.MySQL地理空间数据类型 POINT,存储一个位置点数据 LINESTRING,存储一条线数据 POLYGON,存储一个多边形数据 MULTIPOINT,存储多个位置点数据 MULTILINES ...
- mysql数据类型默认值_MySQL数据类型 - 数据类型默认值
数据类型默认值 数据类型规范可以有显式或隐式的默认值. 数据类型规范中的DEFAULT值子句显式指示列的默认值.示例: SERIAL DEFAULT VALUE是一种特殊情况.在整数列的定义中,它是N ...
- int mysql是什么意思_MySQL数据类型 int什么意思
MySQL数据类型 int什么意思 关注:136 答案:2 mip版 解决时间 2021-01-30 21:51 提问者叫我女王 2021-01-30 10:52 MySQL数据类型 int什么意 ...
最新文章
- 独家 | 一文为你解析神经网络(附实例、公式)
- PAT 1052. Linked List Sorting
- 2021全年“遇冷”后,“电商节”该何去何从?
- 构建制品不一致,后续工作都是白费 | 研发效能提升36计
- 同时运行两个PHP吗,PHP-避免由两个工作人员同时运行后台作业
- java smslib rxtx_短信猫java二次开发包源代码smslib-3.5.4.jar
- [转]WiX v3.7——支持MSBuild、自更新及引用计数
- 【无标题】曲线坐标张量分析
- rpa操作excel_一文看懂RPA与Excel宏的区别
- 微信小游戏接入遇到的坑
- Word中的公式编辑器插入自动编号公式时,隐藏必要的分章节字符串的办法
- 《海外社交媒体营销》一一第1章 电商创业起步
- 如何将图片转换成字符画
- springboot项目:家庭整理服务管理系统39774(java+VUE+Mybatis+Maven+Mysql)
- Docker上部署SpringBoot项目并推送镜像到Docker Hub上---以MacOS为例
- 希望所有程序员的世界里,永远没有BUG
- 数据分析36计(21):Uber、Netflix 常用倍差法模型量化营销活动、产品改版影响效果...
- 10000首好听的歌 qq空间背景音乐 听完不想别的歌
- 不用栈实现二叉树非递归中序遍历
- Netty谈谈ByteBuf
热门文章
- 很实用的 “设为首页”与“加入收藏”代码
- Dataguard failover切换应用redo操作
- Scapy脚本执行出现警告WARNING解决办法
- 编写高效Excel VBA代码的最佳实践(一)
- 【Spring源码】Spring中的AOP底层原理分析
- 鲜为人知的pandas骚操作
- 特来电CMDB应用实践
- Python发行版本Anaconda的安装说明:基于Anaconda2-4.3.1-Windows-x86_64
- learnpythonthehardway EX41 相关
- 1 创建数据库连接对象 IDbConnection