mysql中也分为三大数据类型:数值型,字符型,时间日期型

数值型

数值型分为整数型和小数型(包含小数部分的数据类型)

整型

mysql中光整数型数据类型就有五种:tinyint,smallint,mediumint,int,bigint
tinyint:迷你整型,占用1个字节保存数据,能够表示256个数值
smallint:小整型,占用2个字节保存数据,能够表示65536个数值
mediumint:中整型,占用3个字节保存数据
int:标准整型,占用4个字节保存数据,42亿多
bigint:大整型,占用8个字节保存数据

为什么要有这么多整型?
1.能够最大效率的使用磁盘空间,做到最少浪费。根据实际业务分配内存空间来进行数据保存。
2.查询的效率变高。

如何在项目中选择使用何种整型?
根据业务需求,某一类数据的边界值,看边界值落在那个整型的范围,就是用最小的那个。
在实际操作中tinyint,int使用的较多

整型表案例

默认的,整型都是有符号类型

无符号:表示数值只能是正的,不能有负数
语法:在字段类型后面使用unsigned进行标识
age tinyint unsigned;//年龄是一个迷你整型,无符号表示(0-255)

更新数据

显示宽度:占的位数,当某个数值没有达到显示宽度的时候,在数值的左边使用0来补足显示宽度(不能改变数值本身大小)

默认的,系统不会进行0填充,需要给字段显示的增加一个属性:zerofill,0填充
系统默认显示的宽度是数据类型能够显示的最大宽度。
0填充有一个特点:使用0填充的字段必须为无符号类型,不能为负数进行0填充

0填充是专门用来配合显示宽度:显示宽度只是在数据的值没有达到指定宽度的时候使用0填充,0填充或者显示宽度都不会限制原来值的大小,值的大小由数据类型决定。

什么地方会使用显示宽度?
在一些需要使用0填充地方不改变原来值的大小,却能够用宽度来固定显示数据,保证前端数据的显示不会改变原来的css结构。比如说月份,日期,时间。

小数型

带有小数部分的数据。
mysql中小数型分为两种:浮点型,定点型
  浮点型:float和double
  float:采用4个字节保存数据
  double:采用八个字节保存数据


浮点数的存储使用4个字节32位存储,第一位叫做符号位,会使用符号位后面的8位用来存储街码(底数+指数),其他的用来表示数据。
  浮点数会丢失精度
   float:最大有效位7位左右
   double:最大有效位为15位左右

浮点数的使用方式
float(M,D):M表示整个长度,D表示小数位的长度

数据处理

浮点数只适用于那些对于数值精确要求不高,但是数量特别大的数据。
凡是跟钱相关绝对不用浮点数。
1.7 ======》二进制00000001.1011001
0.7 * 2 = 1.4 1
0.4 * 2 = 0.8 0
0.8 * 2 = 1.6 1
0.6 * 2 = 1.2 1

定点型:decimal
能够自动的扩展宽度来保存数据,保证数据的精度,基于小数部分,如果超出指定长度,仍然会进行四舍五入。
语法:decimal(M,D):M表示总长度,D表示小数部分的长度

定点型与浮点型区别

定点型的数据范围

decimal(65,30)

默认的,如果不使用括号标识decimal的长度,那么默认的是decimal(10,0);
凡是涉及到钱的都会在数据库端使用decimal来进行数据的存储和运算。

字符串型

mysql有以下字符串类型:char,varchar,text,blob,enum,set
char:定长字符串,表示磁盘会分配固定长度的空间去存储数据
  如果数据不够长度,空间依然被占用
  如果数据超出长度,系统会报错
语法:char(L),L表示长度,L表示的字符长度,L的最大值是255

varchar:变长字符串,表示磁盘空间会根据实际数据的长度来自动分配存储空间,但是长度不能超过指定长度

varchar(L),存储的数据只能小于或者等于L个字符,L的理论值是65535

varchar在存储之外还有一个额外的1到2个字节来保存当前varchar的实际占用长度

char和varchar对比(utf8) :一个字符 = 3个字节

非严格模式下(集成环境中),都是对类型要求不严格,所以当数据类型不符合要求的时候,系统会进行自动转换或者截取,从而不报错。但是在严格模式中,系统不会做任何处理,只会做判断,如果失败就报错。

如何区分使用char还是varchar
1.所有字符串长度都必须在255之内
2.如果字符串长度是固定,那么使用char
 md5值,身份证,手机号等等
3.如果字符串长度不固定,那么使用varchar
 姓名,邮箱。。。

char和varchar区别
1.char的效率比varchar要高
2.varchar比char节省空间

当字符串长度超过255之后,就不会使用varchar来进行数据的保存,使用text

text:字符串文本
blob:二进制文本

在记录里面不计算长度(不占记录长度),基本可以“无限”存储数据

enum:枚举,列出一系列的元素,可以从一堆元素中任选一个作为实际的值(单选框)
语法:enum(元素1,元素2…)

枚举的意义?
1.限制用户的输入(规范数据)
2.能够节省磁盘空间

枚举使用2个字节来保存数据,能够保存65535个数据,是因为枚举实际保存的不是字符串而是字符串元素所对应的数值。

如何证明枚举实际存储的是数值呢?
使用算术运算符:mysql会在碰到算术运算符之后,自动进行数据转换,转换成数值类型。转换的标准与PHP一致。
语法:select 字段 + 0 from 表名

中文是如何输出的呢?

set:集合,在定义字段之初,为字段值做一系列的限制,实际存储值的时候,可以是集合类型中的多个元素。集合相当于多选框。
hobby set(‘游泳’,’爬山’,’打球’,’骑车’,’旅游’);
集合是使用8个字节,只能保存64个数据。集合定义的数据类型里面出现的可能的元素的最多个数为64个。

集合可以在插入数据的时候,将实际的顺序给打乱,但是最终保存的时候,系统会将顺序与定义的时候的顺序对比,变成原来的。

集合实际存储的也是数值;

原理:每一个枚举元素,都占据一个位作为自己的空间,该空间上,如果当前元素被选中,那么值为1,否则为0。最终去计算十进制结果的时候,是将所有的二进制先颠倒过来,再计算。

使用set的好处
1.节省空间
2.能够规范数据

对于枚举和集合,在进行数据插入的时候,还可以使用数值进行插入

数据库的字符串类型有很多,但是是从数据库管理员的角度出发去考虑问题。
1.考虑磁盘空间的开销
2.考虑执行效率
作为PHP程序员,基本不考虑这些,只考虑如何能够方便PHP进行操作。所以真正配合PHP使用的字符串:****char,varchar,和text

时间日期格式

datetime:表示年月日时分秒,能够表示9000年,占用8个字节
timestamp:时间戳,使用标准整型存储,表现却是年月日,时分秒
date:日期部分,可以表示1000-9999年
time:时间部分,表示的是一个时间段,从过去什么时间到以后的某个时间
year:年,使用一个字节存在,一个字节只能表示256个数值,在计算的时候加上1900再输出

timestamp时间戳并不能使用真正的时间戳

time类型可以时间时间段

注意:
1.在mysql中,任意一条记录(所有字段的集合)的长度不能超过65535个字节。
所以varchar能够存储的数据的真实长度会变化很大
GBK:varchar能够存储多少个字符?32766个字符
(65535 – 2) / 2 = 32766.5

utf8:varchar能够存储多少个字符?
(65535 – 2) / 3 = 21844.3

2.在mysql中,如果所有的字段里,没有全部不允许为null,那么需要一个字节来保存null
所有字段都不为null

留出一个字节保存null

3**.text不占存储长度空间,但是text本身需要占据10个字节来保存字段名。**

PHP-mysql的数据类型相关推荐

  1. 再谈MySQL JSON数据类型

    2019独角兽企业重金招聘Python工程师标准>>> 本文首发微信公众号<andyqian>.期待你的关注- 前言 眨眼间,有一小段时间没有更新文章了.唉,又懒了... ...

  2. MySQL 字段数据类型/长度

    分类: 数据库学习2010-09-27 16:30 105人阅读 评论(0) 收藏 举报 一.MySQL 字段数据类型/长度 1.数值类型 列类型              需要的存储量 TINYIN ...

  3. MySQL日期数据类型、时间类型使用总结

    转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ----- ...

  4. mysql 变量 数据类型_浅谈mysql(二)数据类型

    //我...我才是不是傲娇呢 //如有问题还请多多指教.上回我们说到我们如何使用MySQL,关键是要看它的用途.用途衍生语句.之后文章的思路,也是如此,从用途出发,然后再到语句. 那么,我们先问几个问 ...

  5. 2Python全栈之路系列之MysQl基本数据类型

    Python全栈之路系列之MySQL基本数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类: 数字类型 日期和时间类型 字符串类型 数字类 ...

  6. mysql中数据类型的长度

    一.varchar(n).char(n)中的n的含义 1)varchar(m),char(n)里面的m或n代表的是字符的个数. 打开mysql手册,看到这样一句话 The CHAR and VARCH ...

  7. MySQL常用数据类型

    MySQL常用数据类型 1.整数类型.浮点数类型.定点类型 (1)整数类型(默认的是有符号的) 整数类型 字节数 无符号(unsigned)范围 有符号(signed)范围 tinyint 1 0-2 ...

  8. mysql空间数据类型解释_MySQL空间数据类型

    MySQL空间数据类型讲解 MySQL具有与OpenGIS类对应的数据类型.某些类型只能保存单个几何值: GEOMETRY POINT LINESTRING POLYGON GEOMETRY能够保存任 ...

  9. MySQL不同数据类型如何表示_MySQL系列(二)--数据类型

    如何选择优化的数据类型: 当一个列有多种数据类型可以选择,选择顺序:数字类型.日期/二进制类型.字符类型,相同级别的数据类型,优先选择占用空间小的类型 1.通常更小的更好 相同级别的数据类型,选择占据 ...

  10. MySQL之数据类型、建表和六大约束

    前言:昨天跟大家分享了MySQL的账号管理.建库及四大引擎,今天与大家分享的知识是MySQL之数据类型.建表和六大约束. 一.数据类型介绍 1.作用:MySQL中定义数据字段的类型对你数据库的优化是非 ...

最新文章

  1. Assertion desc failed at src/libswscale/swscale_internal.h:668
  2. 几何画板200个经典课件_几何画板Sketchpad Mac(数学教学软件)中文版
  3. 【PAT】B1058 选择题(20 分)
  4. Windows远程桌面(mstsc)不能复制粘贴的解决办法
  5. 自定义viewgroup实现ArcMenu
  6. 最常见的Java框架有哪些?
  7. php怎么实现显示gif图片,利用PHP怎么对gif图片进行判断
  8. Mac OS X 下 U盘安装盘简易制作教程
  9. 有什么可以测试耳机性能的软件吗,测试耳机性能好坏的简单方法
  10. chrome 浏览器中印象笔记·剪藏插件无法登陆问题
  11. 【Verilog语法简介】
  12. 我的大数据之路--2019拉钩网爬取(破解反爬虫)
  13. java oop 题目_JavaOOP试题JavaOOP试题.doc
  14. macOS 安装 aircrack-ng 破解 wifi,hashcat ,OnlineHashCrack,在线破解握手包
  15. python手把手教你创作趣味词云(保姆级贴心)
  16. php 跳转qq群代码_QQ群一键强制加群API源代码
  17. crontab任务不会执行解决方案(No MTA installed, discarding output)
  18. SAP Hybris培训-标准课程/企业内训
  19. tinymce编辑器之placeholder插件的实现
  20. mysql下载教程(如何从官方网站下载)

热门文章

  1. java word在线预览_java实现word转pdf在线预览(前端使用PDF.js;后端使用openoffice、aspose)...
  2. AC5 AC6 CMSIS符号对照表
  3. 以技术共生智变,创商业共赢质变 华为云生态峰会盛大启幕
  4. 何钦铭版C语言第3章答案,何钦铭版C语言第3章答案.pdf
  5. 【转】Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)
  6. SqlServer本地数据库迁移到服务器
  7. [20081226更新(加了日文版本支持)]一个JavaScript WEB日历控件,支持IE6,FireFox,可支持不同语言版本,目前支持中文简繁,英,日语
  8. React Native三端同构(二: webpack@4脚手架构建和项目代码规范)
  9. 设计模式原则—单一职责原则
  10. 阿里Code无密钥登录