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)
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个汉字。