Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 4.2 KB

02.数据类型.md

File metadata and controls

91 lines (66 loc) · 4.2 KB

1. 整型

整型类型 字节数 有符号范围 无符号范围
TINYINT 1字节 (-128,127) (0,255)
SMALLINT 2字节 (-32768,32767) (0,65 535)
MEDIUMINT 3字节 (-2^26,2^26-1) (0,2^27-1)
INT 4字节 (-2^31,2^31-1) (0,2^32-1)
BIGINT 8字节 (-2^63,2^63-1) (0,2^64-1)

可选参数:整型[(M)] [UNSIGNED] [ZEROFILL]

  • UNSIGNED:无符号数,例如:age TINYINT UNSIGNED;
  • ZEROFILL:其中参数M表示字节宽度,自动会转为无符号整型,一般适用于学号、编码等宽度无符号数字,可以用0填充,例如:sn TINYINT(6) ZEROFILL;

2. 浮点型

注意:浮点数有精度损失的。

整型类型 字节数 有符号范围 无符号范围
FLOAT 4字节 (-3.40E+38, -1.17E-38) (0, 3.40E+38)
DOUBLE 8字节 (-1.80E+308, -2.23E-308) (0, 2.23E+308)

可选参数:浮点型[(M,D)] [UNSIGNED] [ZEROFILL]

其中M表示显示的值(包括小数位)最大位数,D表示小数位数。 例如:sara FLOAT(7,3) 规定显示的值不会超过7位数字,小数点后面带有 3位数字。

对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值。

注意:浮点数有精度损失的。

3. 定点型

把整数和小数部分分开存储,比较精确。可选参数:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

示例:sara DECIMAL(6,2);

4. 字符串

字符串类型 字节数 描述及存储需求
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TINYBLOB 0~255 不超过 255 个字符的二进制字符串
TINYTEXT 0~255 短文本字符串
BLOB 0~65535 二进制形式的长文本数据
TEXT 0~65535 长文本数据
MEDIUMBLOB 0~2^24-1 二进制形式的中等长度文本数据
MEDIUMTEXT 0~2^24-1 中等长度文本数据
LOGNGBLOB 0~2^32-1 二进制形式的极大文本数据
LONGTEXT 0~2^32-1 极大文本数据

注意:

  • char型,如果不够M个字符,内部用空格补齐,取出时会把右侧空格删除,意味着本身有的空格会被丢弃。varchar类型则不会。
  • 速度上定长比不定长的更快。
  • blob是二进制类型,用来储存图像、音频等类型。可以防止字符集问题导致信息丢失。

5. 枚举和集合

  • 枚举:ENUM(‘value1’,‘value2’,…),插入值时,只能在枚举范围中的一个。
  • 集合:SET(‘value1’,‘value2’,…),插入值时,值是在集合的一个或多个。

6. 日期时间类型

类型 字节数 范围 格式
DATE 4 1000-01-01~9999-12-31 YYYY-MM-DD
TIME 3 ‘00:00:00’~’23:59:59’ HH:MM:SS
YEAR 1 1901~2155 YYYY
DATETIME 8 1000-01-01 00:00:00~9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS
TIMESTAMP 4 1970-01-01 00:00:00~2037年某时 YYYY-MM-DD HH:MM:SS

注意:TIMESTAMP是系统自动填充的时间戳,效率不高,不建议使用,通常用int unsigned来储存时间戳。

# 获取时间戳
SELECT UNIX_TIMESTAMP() ; #当前时间戳1451588688
SELECT UNIX_TIMESTAMP('2016-01-01 00:00:00');

# 把日期时间转为时间戳
SELECT FROM_UNIXTIME(1451588888, '%Y-%m-%d %h:%i:%s'); # 2016-01-01 03:08:08