前言

对于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. LINUX学习--nginx服务器的安装

    一.安装环境 操作系统CentOS6.8 关闭SeLinux和iptables防火墙 二.网络yum源 将下面的软件下载到  /etc/yum.repos.d/   的目录下 官方基础:http:// ...

  2. flutter之搭建环境

    一. 环境搭建1.安装Flutter SDK 使用Flutter开发,首先我们需要安装一个Flutter的SDK. 下载Flutter的SDK 来到Flutter的官网网站,选择最新稳定的Flutte ...

  3. SSRF漏洞用到的其他协议(dict协议,file协议)

    0x00 引言 当SSRF打内网reids时,若gopher协议用不了,我们也可以用其他协议 0x01 dict协议一.定义:词典网络协议,在RFC 2009中进行描述.它的目标是超越Webster ...

  4. CTF中的变量覆盖问题

    0x00 前言 最近在干代码审计,于是就把之前学习的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使 ...

  5. openGL绘图基本框架

    openGL绘图入门和导入外部文件 本文主要介绍通用绘图软件openGL的数据类型和基本的绘图框架,此外还提供了导入obj外部文件的方法,提供的代码稍作修改即可使用,希望能方便初学者快速上手. ope ...

  6. leetcode 206. 反转链表 及 92. 反转链表 II

    206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...

  7. 【机器学习】kNN

    机器学习算法--kNN 目录 机器学习算法--kNN 1. 算法原理 2. 算法实现 2.1 kd-tree构造 2.2 kd-tree查询 2.3 kNN算法实现 3. 算法测试 Ref 1. 算法 ...

  8. MySQL开发篇,存储引擎的选择真的很重要吗?

    前言 谁说MySQL查询千万级别的数据很拉跨?我今天就要好好的和你拉拉家常,畅谈到深夜,一起过除夕!这篇文章也是年前的最后一篇,希望能带给大家些许收获,不知不觉查找文档和参考实体书籍就写了这么多,自己 ...

  9. TypeScript入门文档

    typescript入门文档链接d地址:https://ts.xcatliu.com/basics/type-of-function.html 博主个人站点:www.devloper.top

  10. System.arraycopy()的用法?

    1.使用方法 public void arr(Object arr1, int x, Object arr2, int y, int length) arr1 : 源数组; x: 需要从源数组要复制的 ...