前言

对于MySQL中的数据类型的选择,不同的数据类型看起来可能是相同的效果,但是其实很多时候天差地别。

本章从MySQL中的常用类型出发,结合类型选择的常见错误,贯彻MySQL的常用类型选择。

常用类型

MySQL的常用类型并不多,总的来说分为以下几种:

  1. 整数类型
  2. 实数类型
  3. 字符串类型
  4. 日期和时间类型

整数类型

存储整数的话,可以用以下几种数据类型进行表示:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,分别使用8,16,24,32,64位进行存储。

同时还可以设置UNSIGEND,将大小扩大一倍。

很多有些基础的同学可能会疑惑,比如我们要进行数值之间的计算,如果进行类型转换函数进行转换,那么我们就用不了索引了,性能会极其低下。

其实MySQL中的整数类型,它只代表其硬盘和内存中是如何存储数据的,整数计算中,通常都是使用64位的BIGINT进行运行,包括32位环境亦是如此。

实数类型

实数类型我认为一般来说有三种:float,double,decimal,其中有C语言经验或者Java语言经验的同学应该知道,float和double在很多类型的编程语言中属于基本数据类型中的浮点型。由于操作系统的限制,计算机表示浮点型存在极大的缺陷,会有很大的精度误差。所以在《阿里巴巴Java开发手册》的MySQL部分以及MySQL的官方推荐中,都是强烈建议如果需要完全精确的小数的话,使用decimal进行存储。

所以我认为的话,如果是正常的开发中,所有的小数都使用decimal为好。

字符串类型

无论是哪一种基础设施或者语言,字符串都是其中避不开的一讲,MySQL中关于字符串的类型有:VARCHAR,CHAR,BLOB,TEXT,我在写项目的过程中使用的最多的便是VARCHAR,VARCHAR相当于是没有限制字符串长度的,而CHAR限制了字符串的长度,会丢弃多余的字符。CHAR适合存储定长或者或者很短的数据,比如MD5值和是非(Y,N)。

而BLOB和TEXT我就不是特别的熟悉了,按照《高性能MySQL》来说的话,这两种都是用来存储很大的数据而设计的,其中BLOB以二进制存储,TEXT以字符存储,在存储的时候,作为对象来存储。

日期类型

主要的日期类型:date,datetime,timestamp,time

类型 大小(byte) 范围 格式 样例
year 1 1901~2155 YYYY 2021
date 3 1000-01-01~9999-12-31 YYYY-MM-DD 2021-05-30
time 3 '-838:59:59'/'838:59:59' MM-DD:SS 23:30:00
timestamp 4 1970-01-01 00:00:00UTC~2038……时间,根据时区不同而不同,结束时间为2147483647秒 YYYYMMDDHHMMSS 2021-05-30 12:30:12
datetime 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 2040-05-20 13:14:00

日期类型注意点

  1. time类型小时部分如此大的原因是因为其不止可以表示一天的时间(小于24小时),还可以是某个事件过去的时间,或者两个事件之间的时间间隔。
  2. timestamp与datetime显示格式相同,但是其合法范围不同,timestamp插入的时候会先转为UTC(时间统一时间),取出的时候在转成当地时区时间。
  3. MySQL允许不严格语法,任何标点符号都可以作为日期部分之间的分隔符。

类型选择中的常见错误

  1. 字段使用varchar,但是语句中使用整数类型;或者字段中使用整数类型,语句中使用字符串类型;这样执行的SQL语句不会走索引,而会走全表。
  2. 在不同的表中,表示同一个含义的字段使用不同的数据类型连接,这样也会导致可能的性能问题。

深入MySQL(二):MySQL的数据类型的更多相关文章

  1. MySQL(二)MySQL的启动或链接失败

    有时候用命令mysql -u root -p 或者服务器启动mysql数据库的时候,会出现抛出异常并失败. 以下是遇过的异常. 1.1)抛出的异常:出现ERROR 2002 (HY000): Can' ...

  2. MySQL(二) MySQL基本操作

    数据库的基本操作 启动关闭 MySQL 服务 MySQL 安装好后,默认是当 Windows 启动.停止时,MySQL 也自动.停止.不过,用户可以使用 Windows 下的服务管理器或从命令行使用 ...

  3. (2.5)Mysql之SQL基础——数据类型

    (2.5)Mysql之SQL基础——数据类型 关键词:mysql数据类型 目录: 一.整数型 二.小数型(以下均不能使用无符号) 三.日期时间型 四.字符串型 一.整数型 额外参数示例: int [( ...

  4. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之基础知识

    前言: 在具体回顾每一个功能的实现前,还是有必要先温习一些项目涉及到的PHP.MySQL[语法基础].项目github地址:https://github.com/66Web/php_book_stor ...

  5. Python学习日记(四十二) Mysql数据库篇 十

    前言 当我们自己去写SQL代码的时候有时候会因为不熟练会导致效率低,再之后要进行许多的优化,并且操作也较为繁琐.因此ORM框架就能够解决上面的问题,它能根据自身的一些规则来帮助开发者去生成SQL代码. ...

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

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式                日期范围------------  -------- ...

  7. Java面试题(二)--MySQL

    1 存储引擎 1.简单描述一个Mysql的内部结构? MySQL的基本架构示意图: 大体来说,MySQL可以分为server层和存储引擎层两部分. ① server层包括连接器.查询缓存.分析器.优化 ...

  8. 转载:Centos7 从零编译Nginx+PHP+MySql 二

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  9. 阿里云实战之二(mysql+phpmyadmin)

    前文安装好了空间的基本环境,本来运行在线代码编辑器不需要php+mysql的环境,不过我还是想在后续建设里面引入会员制度,这样php+mysql的环境就必不可少了. 一.Linux下MySQL忘记ro ...

  10. mysql基础之基本数据类型

    原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill ...

随机推荐

  1. Spark本地环境实现wordCount单词计数

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814778610788860424/ 编写类似MapReduce的案例-单词统计WordCount 要统计的文件为 ...

  2. CentOS6.5-Hadoop2.7.3安装hive-2.1.1

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6627723801960382979/ 系统版本,Hadoop已安装完成 Mysql安装完成 准备的解压包 安装zi ...

  3. 深入理解Java虚拟机之自己编译JDK

    题外话 最近在阅读<深入理解Java虚拟机>,其中有一小节实战是自己编译JDK,实际操作下来后遇到问题不少,为此特地记录,也希望可以给大家带来一些参考! 前置准备 平台及工具:Window ...

  4. 网络协议学习笔记(七)流媒体协议和P2P协议

    概述 上一篇讲解了http和https的协议的相关的知识,现在我们谈一下流媒体协议和P2P协议. 流媒体协议:如何在直播里看到美女帅哥 最近直播比较火,很多人都喜欢看直播,那一个直播系统里面都有哪些组 ...

  5. 记一次线上SpringCloud-Feign请求服务超时异常排查

    由于近期线上单量暴涨,第三方反馈部分工单业务存在查询处理失败现象,经排查是当前系统通过FeignClient调用下游系统出现部分超时失败(异常代码贴在下方). Caused by: feign.Ret ...

  6. 机器学习&恶意代码静态检测

    目录 分析工具 方法概述 二进制灰度图 字节(熵)直方图 字符串信息 ELF结构信息 源码分析与OPcode FCG references: 分析工具 readelf elfparser ninja ...

  7. 动态代理及java演示

    代理模式的理解     首先代理二字的含义,程序中代理与字面意思的代理并无区别.比如现实生活中办理车辆审车,我们经常会听说花钱找代理(又称黄牛)办手续,即办手续这个事,不是我们亲自执行,而是通过代理( ...

  8. Scratch 3 矢量编辑器——“临摹”一只哆啦A梦

    利用Scratch来制作一些小作品,常常需要到网上去找图片,而网上下载的图片一般都是位图,往往存在两个问题: 图片不够清晰,当图片放大后会出现"马赛克"现象: 图片中存在不必要的背 ...

  9. 微服务架构 | *3.5 Nacos 服务注册与发现的源码分析

    目录 前言 1. 客户端注册进 Nacos 注册中心(客户端视角) 1.1 Spring Cloud 提供的规范标准 1.2 Nacos 的自动配置类 1.3 监听服务初始化事件 AbstractAu ...

  10. office 下载(免费使用

    https://otp.landian.vip/zh-cn/download.html