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)字节数

    赞赏码

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

  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452653.html
Copyright © 2011-2022 走看看