MySQL支持的数据类型

MySQL支持的数据类型主要有:数值数据类型、日期/时间数据类型、字符串类型。

数值数据类型(用于存数字)包括整数类型(tinyint、smallint、mediumint、int、bigint)、浮点小数类型(float、double)、定点小数类型(decimal);
时间/日期类型有:year、time、date、datetime、timestamp;
字符串类型(用于存储字符串数据,二进制数据)包括文本字符串(char、varchar、tinytext、text、mediumtext、longtext、enum、set),二进制字符串(bit、binary、varbinary、tinyblob、blog、mediumblob、longblob)
MySQL支持的数据类型1、数值数据类型:

类型 描述
tinyint 1字节,-128~127常规,0 ~ 255无符号, 255= 2^ 8-1;127=2^7-1
smallint 2字节,(0~65535,-32768 ~ 32767),65535=2^16-1
mediumint 3字节,(0~167777215),16777215=2^24-1
int 4字节,(0~4294967295),4294967295=2^32-1
bigint 8字节,(0~18446744073709551615),18446744073709551615=2^64-1
float 单精度浮点数,4字节
double 双精度浮点数,8字节
decimal 定点小数类型,允许固定的小数点,M+2字节

**注意:**定点数以字符串形式存储,对精度要求较高时使用decimal较好;尽量避免对浮点数进行减法和比较运算。

2、时间/日期类型

数据类型 描述
data() 日期。格式:YYYY-MM-DD,注释:支持的范围是从‘1000-01-01’到‘9999-12-31’
datatime() 日期和时间的组合,格式:YYYY-MM-DD HH:MM:SS;注释:支持的范围是从‘1000-01-01 00:00:00’到‘9999-12-31 23:59:59’
timestamp 时间戳。timesta值视同Unix纪元(‘1970-01-01 00:00:00’ UTC)至今的描述来存储。格式为:YYYY-MM-DD HH:MM:SS, 注释:支持的范围是从‘1970-01-01 00:00:01’UTC 到‘2038-12-31 03:14:07’UTC
time() 时间。格式:HH:MM:SS,注释:支持的范围从‘-838-59-59’到‘838:59:59’
year() 2位或4位格式的年。注释:4位格式所允许的值:1901到2155。2位格式所允许的值:70到69,表示从1970到2069

3、字符串类型
1、text类型:tinytext、text、mediumtext、longtext;

数据类型 描述
tinytext 存放最大长度为255个字符的字符串
text 存放长度最大为65535个字符的字符串
mediumtext 存放长度最大为16777215个字符的字符串
longtext 存放长度最大为429496295个字符的字符串

2、char类型:char,varchar;

数据类型 描述
char(size) 保存固定长度的字符串(可包含字母、数字以及特殊的字符),在括号中指定字符串的长度,最多为255个字符
varchar(size) 保存可变长度的字符串(可包含字母、数字以及特殊的字符),在括号中指定字符串的最大长度,最多为255个字符, 注释:如果值的长度大于255,则转换为text类型

3、enum(x,y,z,etc…)
允许你输入可能值的序列。可以在enum列表中列出最大65535个值,如果列表中不存在插入的值,则返回空值

4、set类型:set
set类型格式:set(’值1’,’值2’…) ——可以有0或者多个值,对于set而言,若插入的值为重复的,则只取一个。插入的值乱序,则自动按顺序插入排列。插入不正常值,则忽略。

5、二进制类型bit,blob
bit(M)——保存位字段值(位字段类型),M表示值的位数;
g:select BIN(b+0) from 表名;—–b为列名;b+0表示将二进制的结果转换为对应的数字的值,BIN()函数将数字转换为二进制。

blog——二进制大对象,用来存储可变数量的数据。

数据类型 描述
bit (M) 保存位字段值,M表示值的位数
binary(n) 固定长度二进制数据,最多8000字节
varbinary(n) 可变长度二进制数据,最多8000字节
varbinary(max) 可变长度二进制数据,最多2GB字节
tinyblob 最多存放255字节的数据
blob 最多存放65535字节的数据
mediumblob 最多存放16777215字节的数据
longblob 最多存放4294967295字节的数据

问:SQL数据类型varchar和char的区别?
答:char:固定长度,存储ANSI字符,不足的补英文半角空格。CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义CHAR(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim(),比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。但正因为是固定长度,所以速度效率高。
varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

补充:nchar: 固定长度,存储Unicode字符,不足的补英文半角空格,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。
nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。

char、varchar最多能存储8000个英文,4000个汉字。