MySQL 常见的数据类型有字符串类型、数字类型、时间类型、二进制类型。具体的分类如下图:

1. 字符串类型

字符串类型用于存储字符和字符串数据,主要包含三种具体的类型:定长字符串、变长字符串以及字符串大对象。各种数据库对于字符串类型的支持如下:

数据类型 Oracle MySQL SQL Server PostgreSQL
定长字符串 CHAR(n) CHAR(n) CHAR(n) CHAR(n)
变长字符串 VARCHAR2(n) VARCHAR(n) VARCHAR(n) VARCHAR(n)
字符串大对象 CLOB TEXT VARCHAR( MAX ) TEXT

SQL 中,输入字符串类型的常量和数据时,需要使用单引号引用。

1.1 定长字符串

CHAR(n) 表示长度固定的字符串,其中 n 表示字符串的长度。常见的定义方式包括:

  • CHAR,长度为 1 的字符串,只能存储 1 个字符;
  • CHAR(5),长度为 5 的字符串。

对于定长字符串,如果输入的字符串长度不够,将会使用空格进行填充。通常来说,只有存储固定长度的数据时,才会考虑使用定长字符串类型。例如 18 位身份证,6 位邮政编码等。

1.2 变长字符串

VARCHAR(n) 表示长度不固定的字符串,其中 n 表示允许存储的最大长度。对于变长字符串,如果输入的字符串长度不够定义的最大长度,则存储实际的内容。

CHAR VARYINGCHARACTER VARYINGVARCHAR 的同义词,可以通用。 Oracle 中使用 VARCHAR2 表示变长字符串类型。

变长字符串类型一般用于存储长度不固定的内容。

1.3 字符串大对象

CLOB 表示字符串大对象,通常用于存储普通字符串类型无法支持的更长的字符串数据。例如整篇文章、备注、评论等。

  • Oracle 使用 CLOB 类型存储大型字符串;
  • MySQL 提供了 TINYTEXTTEXTMEDIUMTEXT 以及 LONGTEXT 分别用于存储不同长度的文本数据;
  • SQL Server 使用 VARCHAR( MAX ) 存储大文本数据;
  • PostgreSQL 提供了 TEXT 类型存储任意长度的字符串;

CHARACTER LARGE OBJECTCHAR LARGE OBJECTCLOB 的同义词,可以通用。

2. 数字类型

数字类型主要分为两类:精确数字和近似数字。各种数据库对于数字类型的支持如下:

数据类型 Oracle MySQL SQL Server PostgreSQL
精确数字 SMALLINT
INTEGER

NUMERIC(p, s)

SMALLINT
INTEGER
BIGINT
NUMERIC(p, s)
SMALLINT
INTEGER
BIGINT
NUMERIC(p, s)
SMALLINT
INTEGER
BIGINT
NUMERIC(p, s)
近似数字 BINARY_FLOAT
BINARY_DOUBLE
FLOAT
DOUBLE PRECISION
REAL
DOUBLE PRECISION
REAL
DOUBLE PRECISION

2.1 精确数字

精确数字类型用于存储整数或者包含固定小数位的数字。其中, SMALLINTINTEGERBIGINT 都可以表示整数。

对于 MySQLSQL Server 以及 PostgreSQL

  • SMALLINT 支持 -32768 ~ 32767;
  • INTEGER 支持 -2147483648 ~ 2147483647;
  • BIGINT 支持 -263 ~ 263-1。

Oracle 中的 SMALLINTINTEGER 都是 NUMBER(38,0) 的同义词; Oracle 不支持 BIGINT 关键字。

INTINTEGER 的同义词,可以通用。 MySQL 中还提供了 TINYINT ,支持 -128 ~ 127; MEDIUMINT 支持 -8388608 ~ 8388607。另外,MySQL 中的所有整型分为有符号类型(例如 INTEGERINTEGER SIGNED )和无符号类型(例如 INTEGER UNSIGNED ),无符号整型支持的正整数范围扩大了一倍。

NUMERIC(p, s)DECIMAL(p, s) 可以看作相同的类型,用于存储包含小数的精确数字。

其中,精度 p 表示总的有效位数,刻度 s 表示小数点后允许的位数。例如,123.04 的精度为 5,刻度为 2。 ps 是可选的, s 为 0 表示整数。 SQL 标准要求 p ≥ s ≥ 0 并且 p > 0

DECDECIMAL 的同义词,可以通用。 Oracle 中的 NUMERICDECIMAL 都是 NUMBER 的同义词。

整数类型通常用于存储数字 id、产品数量、课程得分等数字; NUMERIC 用于存储产品价格、销售金额等包含小数并且准确度要求高的数据。

2.2 近似数字

近似数字也称为浮点型数字,一般使用较少,主要用于科学计算领域。

REAL 表示单精度浮点数,通常精确到小数点后 6 位;DOUBLE PRECISION 表示双精度浮点数,通常精确到小数点后 15 位。浮点数运算更快,但是可能丢失精度;浮点数的比较运算可能会导致非预期的结果。

  • Oracle 使用 BINARY_FLOATBINARY_DOUBLE 表示浮点数。
  • MySQL 使用 FLOAT 表示单精度浮点数,同时区分有符号和无符号的浮点数。

3. 日期时间类型

  • DATE 存储年、月、日;
  • TIME 存储时、分、秒,以及秒的小数部分;
  • TIMESTAMP 同时包含年、月、日、时、分、秒,以及秒的小数部分。

各数据库的差异:

  • Oracle 中的 DATE 类型包含了额外的时、分、秒,不支持 TIME 类型。
  • SQL Server 使用 DATETIME2DATETIMEOFFSET 表示时间戳。
  • MySQL 还支持 DATETIME 表示时间戳。

4. 二进制类型

二进制类型用于存储二进制数据,例如文档、图片,视频等。二进制类型具体包含以下三种:

  • BINARY(n) ,固定长度的二进制数据, n 表示二进制字符数量;
  • VARBINARY(n) ,可变长度的二进制数据, n 表示支持的最大二进制字符数量;
  • BLOB ,二进制大对象。

各数据库差异:

  • Oracle 支持 BLOB 二进制类型;
  • MySQL 支持 BINARYVARBINARY 以及 TINYBLOBBLOBMEDIUMBLOBLONGBLOB 二进制类型;
  • SQL Server 支持 BINARYVARBINARY 以及 VARBINARY ( MAX ) 二进制类型;
  • PostgreSQL 支持 BYTEA 二进制类型。

5. 如何选择数据类型

一般来说,先确定基本的类型:

  • 文本数据,只能使用字符串类型;
  • 数值数据,尤其是需要进行数学运算的数据,选择数字类型;
  • 日期和时间信息,最好使用原生的日期时间类型;
  • 文档、图片、音频和视频等,使用二进制类型;或者可以考虑存储在文件服务器上,然后在数据库中存储文件的路径。

接下来需要进一步确定具体的数据类型。在满足数据存储和扩展的前提下,尽量使用更小的数据类型,可以节省一些存储,通常性能也会更好。

对于字符数据,一般使用 VARCHAR 类型;如果数据长度能够确保一致,可以使用 CHAR ;指定最大长度时,满足存储需求的前提下尽量使用更小的值。

不要使用字符串存储日期时间数据,它们无法支持数据的运算。例如获得两个日期之间的间隔,需要依赖应用程序进行转换和处理。

参考:

https://gitbook.cn/gitchat/column/undefined/topic/5db92c23a9c3a53bc3800f0d

MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)相关推荐

  1. mysql学习笔记12 其他函数

    1.概述: 举例: 查询用户 mysql> select user(); +--------------------+ | user() | +--------------------+ | r ...

  2. MySQL学习笔记:upper、lower、ucase、lacase——字符串函数

    在MySQL中,通过利用upper.lower.ucase.lacase几个函数对字符串进行大小写转换. upper(str)--根据当前字符集映射返回字符串str,并将所有字符更改为大写.默认值是l ...

  3. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  4. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  5. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  6. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  7. 献给入门小白的MySQL学习笔记+案例

    MySQL学习笔记 目录 MySQL学习笔记 1.SQL概述 1.1:数据库的好处 1.2:数据库管理系统 1.3:SQL语言概述 1.4:SQL语言的分类 2.安装与使用 2.1:MySql数据库产 ...

  8. MySQL学习笔记-基础篇2

    MySQL学习笔记-基础篇2 目录 MySQL学习笔记-基础篇2 8.子查询 8.1 需求分析与问题解决 8.1.1 实际问题 8.1.2 子查询的基本使用 8.1.3 子查询的分类 8.2 单行子查 ...

  9. Mysql学习笔记day1 --三天学完mysql所有知识点

    Mysql 超全MySQL学习笔记,三天就可以学会熟练运用SQL语句,干货满满,文章末尾有相应的练习题,可以多练练加深印象,希望我的文章对你有所帮助 一.服务器 1.什么是服务器?用于提供共享资源文件 ...

最新文章

  1. 字符设备驱动开发流程详解
  2. c++ primer学习笔记(2)-c++基本数据类型
  3. Android 编译 SDK
  4. jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
  5. php curl 代理ip访问url
  6. 10.21 nmap:网络探测工具和安全/端口扫描器
  7. ROS学习笔记-ROS语音识别与语音输出[2]
  8. vuex登录后设置token
  9. 单体 soa 微服务 区别_漫谈何时从单体架构迁移到微服务?
  10. 使用Java的Apache Camel入门
  11. 移动办公计算机,最适合移动办公的三款掌上电脑点评
  12. java.net.SocketException: Software caused connection abort: socket write erro
  13. 两种DIV水平居中的方法
  14. python select
  15. Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)...
  16. 深度学习与 Spark 和 TensorFlow
  17. 一、Java多线程基础
  18. 关于CSP-J/S2019准考证下载、考点查询等问题的说明
  19. python自动生成字幕脚本_自动生成字幕软件?
  20. S-PTAM:Stereo Parallel Tracking and Mapping论文笔记

热门文章

  1. 伍六七带你学算法——被忽视的数学公式
  2. 用心真诚对待,懂你的人
  3. 【运维学习笔记】运维入门
  4. AICompiler动态shape编译框架
  5. MinkowskiPooling池化(下)
  6. Cookie和Session的区别与联系
  7. 2021年大数据Kafka(十二):❤️Kafka配额限速机制❤️
  8. 2021年大数据Spark(四十一):SparkStreaming实战案例六 自定义输出 foreachRDD
  9. Python案例:使用正则表达式的爬虫
  10. CoordinatorLayout 和 AppBarLayout 实现的局部点击按钮实现折叠和展开