zoukankan      html  css  js  c++  java
  • 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}形式的数据。

    常用数据类型大小

    类型存储数据范围(只考虑无符号)单位
    TINYINT0-255整数
    SMALLINT0-65535整数
    MEDIUMINT0-16777215整数
    INT0-4294967295整数
    BIGINT0-18446744073709551615整数
    DATETIME1000-01-01 00:00:00.000000 -> 9999-12-31 23:59:59.999999时间点
    TIMESTAMP1970-01-01 00:00:01.000000 UTC -> 2038-01-19 03:14:07.999999 UTC.时间点
    TIME-838:59:59.000000 -> 838:59:59.000000时间点
    CHAR0-255字符数
    VARCHAR0-65535字符数
    BINARY0-255字节数
    VARBINARY0-65535字节数
    TINYBLOB255字节数
    BLOB65535(64K-1)字节数
    MEDIUMBLOB16777215(16M-1)字节数
    LONGBLOB4294967295(4G-1)字节数

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    UVA
    剑指offer 面试题11
    SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇, 最终的解决方案 验证。
    ASC(1)G(上升时间最长的序列)
    J2EE它是一个框架?平台?规范?
    C++和python使用struct传输二进制数据结构来实现
    前端开发面试题集(二)
    C语言中<CR>是什么意思
    Delphi ParamStr 使用方法
    打包工具 使用帮助 inno setup
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452653.html
Copyright © 2011-2022 走看看