Mysql5.7版本中数据表字段可用的类型

Mysql5.7版本中数据表字段可用的类型

大家好,又见面了,我是全栈君。

前言

为什么会有这个总结,因为在测试Mysql的字符串函数时发现,char 和 varchar 有些不同,网上搜索一番发现了各种charvarcharnvarchar 类型的对比,还有一些奇奇怪怪的这里就不说了,然后我就开始了对这几种类型字符串的测试,接着就悲剧了,测试多次之后发现创建为nvarchar类型的字段居然是varchar类型的,再查询官方文档后发现,当前版本(5.7.21)的Mysql根本就没有nvarchar类型的字段,白白浪费了时间,所以要把Mysql支持的字段列举在这里,方便后面查找使用。

从13年开始工作到现在,数据库主要使用Mysql,关于常使用的字段类型无非 intcharvarcharblobdatetime 这几种,工作之前用的最多的是SqlServer,其次就是Oracle和db2了,当时数据库的规模也不大,也没有注意到字段都有哪些类型,基本也是使用上述几种,因为今天在Mysql中的数据类型这栽了跟头,所以查了下官方文档,看看到底都有哪些类型。

支持类型

真是不查不知道,查询后发现当前版本(5.7.21-log MySQL Community Server)支持的数据类型居然有40种,这还是超出我的想象的,以字典排序列举在此方便查找:

bigintbinarybitblobchardatedatetimedecimaldoubleenumfloatgeometrygeometrycollectionintintegerjsonlinestringlongbloblongtextmediumblobmediumintmediumtextmultilinestringmultipointmultipolygonnumericpointpolygonrealsetsmallinttexttimetimestamptinyblobtinyinttibytextvarbinaryvarcharyear

类型简述

数字类型

  • BIT[(M)]
    比特值类型,M默认为1,范围是[1,64]。

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]
    单字节整数,有符号时范围是[-128,127],无符号时范围是[0,255]。

  • BOOL, BOOLEAN
    布尔值类型,需要注意的是创建表时如果指定这两种类型会被自动转为TINYINT类型,0代表false,非0代表true。

  • SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
    两字节整数,有符号时范围是[-32768,32767],无符号时范围是[0,65535]。

  • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
    三字节整数,有符号时范围是[-8388608,8388607],无符号时范围是[0,16777215],这个类型在编程语言中很少见。

  • INT[(M)] [UNSIGNED] [ZEROFILL]
    四字节整数,有符号时范围是[-2147483648,2147483647],无符号时范围是[0,4294967295],与INTEGER等价。

  • BIGINT[(M)] [UNSIGNED] [ZEROFILL]
    八字节整数,有符号时范围是[-9223372036854775808,9223372036854775807],无符号时范围是[0, 18446744073709551615]。

  • SERIAL
    是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE类型的别名,感觉可以直接拿来做主键。

  • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
    用于存储精确小数,M表示有效数字位数,范围是[1,65],默认是10,D表示小数点后位数,范围是[0,30],默认是0。

  • NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
    是DECIMAL的别名,同样含义的还有DEC[(M[,D])] [UNSIGNED] [ZEROFILL]、FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]。

  • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
    单精度浮点数,M表示有效数字位数,D表示小数点后位数,范围有三部分[-3.402823466E+38,-1.175494351E-38],0,[1.175494351E-38,3.402823466E+38],该类型属于Mysql自己的扩展,依赖硬件和操作系统,指定UNSIGNED表示禁用负数。

  • FLOAT§ [UNSIGNED] [ZEROFILL]
    单精度浮点数,p用来表示精度,取值为0-24等价于没有M和D的FLOAT,取值为25-53等价于没有M和D的DOUBLE。

  • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
    双精度浮点数,表示有效数字位数,D表示小数点后位数,范围有三部分[-1.7976931348623157E+308,-2.2250738585072014E-308],0,[2.2250738585072014E-308, 1.7976931348623157E+308],该类型属于Mysql自己的扩展,依赖硬件和操作系统,指定UNSIGNED表示禁用负数。等价于DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]。

  • REAL[(M,D)] [UNSIGNED] [ZEROFILL]
    一般情况等价于DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL],但如果SQL mode指定了REAL_AS_FLOAT,那么它等价于FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]。

日期和时间类型

  • DATE
    日期类型,展示格式为’YYYY-MM-DD’,支持的范围是[‘1000-01-01’ , ‘9999-12-31’]。

  • DATETIME[(fsp)]
    日期时间格式,展示格式为’YYYY-MM-DD hh:mm:ss[.fraction],支持范围是[‘1000-01-01 00:00:00.000000’, ‘9999-12-31 23:59:59.999999’],fsp表示小数位数,默认是0,取值范围是[0,6]。

  • TIMESTAMP[(fsp)]
    时间戳,范围是[‘1970-01-01 00:00:01.000000’ UTC, ‘2038-01-19 03:14:07.999999’ UTC],注意到起始秒数从1开始,是因为0被保留用来代表’0000-00-00 00:00:00’了,fsp表示小数位数,默认是0,取值范围是[0,6]。

  • TIME[(fsp)]
    时间类型,展示格式为 ‘hh:mm:ss[.fraction]’,支持的范围是[’-838:59:59.000000’, ‘838:59:59.000000’],fsp表示小数位数,默认是0,取值范围是[0,6]。

  • YEAR[(4)]
    代表年份类型,展示格式为’YYYY’,支持的范围是[1901, 2155]和0000。

字符串类型

  • [NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
    固定长度的字符串,M表示字符串最大长度,范围是(0,255],若实际长度不足M,实际串右侧会填充空格,M默认为1。

  • [NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
    可变长度的字符串,M表示字符串最大长度,范围是(0, 65535],当存储UTF8编码中文时,一般需要3个字节存储一个汉字。

  • BINARY[(M)]
    与CHAR类似,只是存储的是二进制字节串而非普通的字符串。

  • VARBINARY(M)]
    与VARCHAR类似,只是存储的是二进制字节串而非普通的字符串。

  • TINYBLOB
    字节串,最大长度是255。

  • TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
    字符串,最大长度是255。

  • BLOB[(M)]
    字节串,最大长度64K-1,若指定M,则会创建一个能存储M字节最小的BLOB类型,比如TINYBLOB。

  • TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
    字符串,最大长度64K-1,若指定M,则会创建一个能存储M字节最小的BLOB类型,比如TINYTEXT。

  • MEDIUMBLOB
    字节串,最大长度16M-1。

  • MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
    字符串,最大长度16M-1。

  • LONGBLOB
    字节串,最大长度4G-1。

  • LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
    字符串,最大长度4G-1。

  • ENUM(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]
    枚举值,一个字符串代表一个值,内部通过整数实现,理论上最多可以有65535个不同的值,但实际上这个值小于3000。

  • SET(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]
    集合,包含一组字符串,其内部还是呈现为一个整数,最大可以有64个不同的字符串对象。

特殊数据类型

Mysql提供了GEOMETRY、POINT、LINESTRING、POLYGON等特殊类型来与OpenGIS类一一对应,用来存储一些图形数据,同时还有MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION可以表示这些集合,我感觉我是没机会用这些了,用到了再展开说吧。

Json数据类型

自从Mysql5.7.8之后添加的一种类型,可以存储{“k1”: “val”, “k2”: 110}形式的数据。

常用数据类型大小

类型 存储数据范围(只考虑无符号) 单位
TINYINT 0-255 整数
SMALLINT 0-65535 整数
MEDIUMINT 0-16777215 整数
INT 0-4294967295 整数
BIGINT 0-18446744073709551615 整数
DATETIME 1000-01-01 00:00:00.000000 -> 9999-12-31 23:59:59.999999 时间点
TIMESTAMP 1970-01-01 00:00:01.000000 UTC -> 2038-01-19 03:14:07.999999 UTC. 时间点
TIME -838:59:59.000000 -> 838:59:59.000000 时间点
CHAR 0-255 字符数
VARCHAR 0-65535 字符数
BINARY 0-255 字节数
VARBINARY 0-65535 字节数
TINYBLOB 255 字节数
BLOB 65535(64K-1) 字节数
MEDIUMBLOB 16777215(16M-1) 字节数
LONGBLOB 4294967295(4G-1) 字节数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111627.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月17日 下午10:00
下一篇 2022年2月17日 下午10:00


相关推荐

  • 轻量级的bug管理平台对比

    轻量级的bug管理平台对比领导让我找一款市面上比较好用的 bug 管理工具 要求就是简洁 够用就好 经过筛查对比 最终找到了 4 款产品 都是轻量级的 bug 管理工具 相同的功能我就不一一描述了 主要和大家分享一下我总结出的不同点 产品一 bugclose www bugclose cn 产品二 delbug www delbug cn 产品三 easybug easybug org 产品四 bugfree

    2026年3月18日
    1
  • Oracle 表空间详解

    Oracle 表空间详解目录目录表空间概述表空间的分类默认表空间查看默认的永久表空间查看默认的 TEMP 表空间查看默认的表空间类型逻辑结构到物理结构的映射对表空间的操作查看表空间使用情况查看数据库拥有的表空间查看表空间中的数据文件查看用户拥有的表空间创建表空间修改表空间修改用户的默认和临时表空间修改表空间的状态修改表空间的数据文件删除表空间用户表空间限额表空间概述 Oracle 的表空间属于

    2026年3月18日
    2
  • stm32蓝牙模块控制小车_如何让电脑有蓝牙功能

    stm32蓝牙模块控制小车_如何让电脑有蓝牙功能重要声明看过我前面51小车博客的都知道我是软件工程专业的,对于硬件方面都是因为感兴趣自学的,这不,因为今年寒假放假比较早,趁这个时间学习了STM32相关知识,经过近一个月的学习对于STM32算是入门了,为了检验自己的学习效果,我决定就着51小车的架子用STM32试试,经过一个下午的忙活算是成功了!!!所以再来和大家分享一下。所需知识贮备相信看到这篇文章的小伙伴都是有相关基础的,这里只是给和我一样自学的小伙伴提个醒。动手之前你需要这些:硬件电路连接相关能力C语言基础能力STM32定时器、中断、串

    2022年10月9日
    4
  • python 生成exe文件

    python 生成exe文件在windows下,可以使用pyinstaller打包python程序为exe可执行程序。1、安装pyinstaller在cmd命令行窗口运行以下命令安装pyinstallerpipinstallpyinstaller2、打包python程序在python程序所在目录,执行以下命令#切换到指定目录cd/dpath#正常打包命令pyinstaller-F-w-iico_pathxxx.py-F是将所有文件打成一个exe文件,一般是必写的(注意必须

    2022年4月29日
    57
  • 服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好

    服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好云服务器矿机内容精选换一换公有云平台支持弹性云服务器在专属主机与公共资源池之间迁移,具体包括:将创建在专属主机上的弹性云服务器迁移至其他专属主机。将创建在专属主机上的弹性云服务器迁移至公共资源池,即不再部署在专属主机上。将公共资源池的弹性云服务器迁移至专属主机上,成为专属主机上创建的弹性云服务器。关机状态的弹性云服务器才能执行迁移操作。云备份或云服务器备份不受冷迁用户可以在管理控制台对专属主机上…

    2022年9月30日
    4
  • matlab 伽马校正曲线,【图像处理知识复习】02伽马校正matlab,C++实现

    matlab 伽马校正曲线,【图像处理知识复习】02伽马校正matlab,C++实现1.背景:伽马校正可以用来调整图像的亮度,公式为I=I^gamma。当gamma>1,高光部分动态范围被压缩,低光部分动态范围被扩展(使低光部分的细节可以看清),图像整体变暗;当gamma<1,高光部分被扩展,低光部分被压缩,图像整体变亮。如图:2.matlab代码:clc;clear;gamma=0.3;img=imread(‘D:/Code/Image/half…

    2026年3月6日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号