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

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

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

bigint binary bit blob char date datetime decimal double enum float geometry geometrycollection int integer json linestring longblob longtext mediumblob mediumint mediumtext multilinestring multipoint multipolygon numeric point polygon real set smallint text time timestamp tinyblob tinyint tibytext varbinary varchar year

  • 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) 字节数
文章目录前言支持类型类型简述数字类型日期和时间类型字符串类型特殊数据类型Json数据类型常用数据类型大小前言为什么会有这个总结,因为在测试Mysql的字符串函数时发现,char 和 varchar 有些不同,网上搜索一番发现了各种char、varchar、nvarchar 类型的对比,还有一些奇奇怪怪的这里就不说了,然后我就开始了对这几种类型字符串的测试,接着就悲剧了,测试多次之后发现创建为...
Oracle varchar2 varchar2(50) 表示该 字段 bai 类型 为varchar2 类型 ,长度为50,可以存单字节字符50个,du如zhi字母、数dao字等,可以存储双字节字符25个,如汉字。 varchar2是Oracle 特有的一种数据库 类型 varchar2 存贮为不定长。 varchar2的最大长度是4000。 Oracle varchar varchar 存贮为定长 varchar2与varchar的区别在于 如果定义了一个 字段 为varchar(10),那么存贮到这个 字段 的值,不
要了解一个数据库,我们必须了解其支持的数据 类型 MySQL 支持大量的 字段 类型 ,其 常用的也有很多。前面文章我们也讲过 int 及 varchar 类型 的用法,但一直没有全面讲过 字段 类型 ,本篇文章我们将把 字段 类型 一网打尽,讲一讲常用 字段 类型 的用法。 常用的 字段 类型 大致可以分为数值 类型 、字符串 类型 、日期时间 类型 三大类,下面我们按照分类依次来介绍下。 1.数值 类型 数值 类型 大类又可以分为整型、浮点型、定点型三小类。 整型主要用于存储整数值,主要有以下几个 字段 类型 : 整型经常被用到,比如 tinyint insert into A('id','name','location') value(null,'测试数据',ST_GeomFromText('POINT(104.066143 30.573095)')); POINT函数里面的参数左边是经度,右边是纬度,改变值 (update)也
11.2 Numeric Types 数字 类型 11.2.1 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT 整数 类型 (精确值) 11.2.2 Fixed-Point Types (Exact Value) - DECIMAL, NUMERIC 定点 类型 11.2.3 Float
以下是在Windows系统 安装 MySQL 5.7 版本 的步骤: 1. 下载 MySQL 5.7安装程序,可以从 MySQL 官网下载:https://dev. mysql .com/downloads/ mysql /5.7.html 2. 双击下载的安装程序,选择“Custom”安装 类型 3. 在“Select Products and Features”页面 ,选择 MySQL Server和 MySQL Workbench,点击“Next” 4. 在“Installation Path”页面 ,设置 MySQL 服务器的安装路径,点击“Next” 5. 在“Configuration”页面 ,选择“Standalone MySQL Server / Classic MySQL Replication”,然后点击“Next” 6. 在“Accounts and Roles”页面 ,设置root用户的密码,然后点击“Next” 7. 在“Windows Service”页面 ,选择“Install as Windows Service”选项,然后点击“Next” 8. 在“Apply Server Configuration”页面 ,点击“Execute”按钮,等待安装程序完成配置 9. 安装完成后,可以使用 MySQL Workbench连接到 MySQL 服务器,或使用命令行工具(如 MySQL Command Line Client)操作 MySQL 数据库。