一、数值类型

MySQL支持所有标准SQL中的数值类型:
包括严格数据类型(integer(int)、smallint、decimal、numeric
近似数值数据类型(float、real、double
在此基础上扩展增加(tinyint、mediumint、bigint)3种长度不同的整型,增加了bit位类型,用来存放位数据

数值类型

字节

有符号存储范围

无符号存储范围

描述

tinyint

1byte

(-128,127)

(0,255)

小整数值

smallint

2byte

(-32768,32767)

(0,65535)

大整数值

mediumint

3byte

(-2^23,(2^23)-1)

(0,16 777 215)

大整数值

int(integer)

4byte

(-2^31,(2^31)-1)

(0,4294967295)

大整数值

bigint

8byte

(-2^63,(2^63)-1)

(0,18446744073709551615)

极大整数值

float(m,d)

4byte

-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38m是数字总位数,d是小数点后的位数;若m和d别省略,根据硬件允许的限制来保存值

单精度浮点数值

double

8byte

-1.7976931348623157E+308到-2.22507385854072014E-308、0和2.22507385854072014E-308到1.7976931348623157E+308

双精度浮点数值

decimal(m,d)

m指定小数点左边和右边可以存储十进制数字的最大个数,最大精度为38;d指定小数点右边可以存储的十进制数字的最大个数,小数位数必须是0~m的值,默认小数位数是0

定点数值

存储范围越小,精度越高;存储数值范围越大,精度越不准确
对于要求精度及固定小数点位数的数值存储,则采用decimal(numeric)好处在于可以自定义小数位数且精度高
若数值范围巨大,则只能用float(real)类型,但一般不提倡使用

二、字符串类型

MySQL数据库提供6种基本字符串类型:
char、varchar、binary、varbinary、blob、text
用来存放字符,字符串、文本、二进制字符串数据

类型

大小

描述

char

0-255字节

定长字符串

varchar

0-65535字节

变长字符串

tinyblob

0-255字节

不超过255个字符的二进制字符串

tinytext

0-255字节

短文本字符串

blob

0-65535字节

二进制形式的长文本数据

text

0-65535字节

长文本数据

mediumblob

0-16777215字节

二进制形式的中等长度文本数据

mediumtext

0-16777215字节

中等长度文本数据

longblob

0-4294967295字节

二进制形式的极大文本数据

char

0-4294967295字节

极大文本数据

varbinary(m)

允许长度为0~m个字节的定长字符串,值的长度+1个字节

binary(m)

允许长度为0~m个字节的定长字符串

1、varchar和text区别:
(1)varchar可指定n,text不能指定;
(2)内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节;
(3)text类型不能有默认值;
(4)varchar可直接创建索引,text创建索引需指定前多少个字符;
(5)varchar的查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
2、text和blob的区别:
(1)blob和text的存储方式不同:text以文本方式存储,blob以二进制方式存储;
(2)text英文存储区分大小写,blob不区分;
(3)blob存储的数据只能整体读出;
(4)text可以指定字符集,blob不用指定字符集。
3、binary和varbinary类似于char和varchar
不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值

三、日期时间类型

MySQL数据库提供5种日期时间类型:
date、time、year、datetime、timestamp
用来存储和日期时间相关的数据,每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值

类型

字节

范围

格式

描述

date

4byte

1000-01-01~9999-12-31

YYYY-MM-DD

日期值

time

3byte

‘-838:59:59’~‘838:59:59’

HH:MM:SS

时间值

year

1byte

1901~2155

YYYY

年份值

datetime

8byte

1000-01-01 00:00:00~9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

日期时间组合值

timestamp

4byte

1970-01-01 00:00:00~2037年某时

YYYY-MM-DD HH:MM:SS

时间戳

注意:
(1)关于timestamp时间戳,当值大于2037年则会抛出异常:

mysql 存储新闻文章的数据类型 mysql存文本用什么数据类型_mysql 存储新闻文章的数据类型

四、复合数据类型

MySQL数据库提供2种复合数据类型:
enum、set:enum单选字符串数据类型和set多选字符串数据类型。
一个enum类型只允许从一个集合中取得一个值;而set类型允许从一个集合中取得任意多个值。

类型

格式

存储大小

enum

enum(“value1”,“value2”,“value3”,…)

1byte:(1-255个值);2byte:(256-65535个值)

set

set(“value1”,“value2”,“value3”,…)

1byte:(1-8个值);2byte:(9-16个值);3byte:(17-24个值);4byte:(25-32个值);8byte:(33-64个值)

enum格式: enum(“value1”,“value2”,“value3”,…)
实际上,enum的选项都对应一个数字,依次是1,2,3,4,5…最多有65535个选项,使用的时候,可以使用选项的字符串格式,也可以使用对应的数字

set的格式: set(“value1”,“value2”,“value3”,…)
set的每个选项值对应一个数字,依次是1,2,4,8,16…最多有64个选项,使用的时候,可以使用set选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和