在写sql语句的时候,数据类型是避不可少的一个环节,以下是我在学习的过程中总结的数据类型,仅供参考:
类型 | 有符号(signed)范围 | 无符号(unsigned)范围 | 描述 |
tinyint | (-128,127) | (0,255) | 小整数值 |
smallint | (-32768,32767) | (0,65535) | 大整数值 |
mediumint | (-8388608,8388607) | (0,16777215) | 大整数值 |
int 或 integer | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
bigint | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
float | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
double | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
decimal | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点值) |
在上表可以看到每一个类型都是有自己相对应的范围,大于某个数值之后不能再使用原类型了,需注意类型的范围。
类型 | 描述 |
char | 定长字符串 |
varchar | 变长字符串 |
tinyblob | 不超过255个字符的二进制数据 |
tinytext | 段文本字符串 |
blob | 二进制数据的长文本数据 |
text | 长文本数据 |
mediumblob | 二进制形式的中等长度文本数据 |
mediumtext | 中等长度文本数据 |
longblob | 二进制形式的极大文本数据 |
longtext | 极大文本数据 |
字符串类型中char与varchar使用频率最高,它们的区别在于是否为定长字符串,在描述某一确定值时,比如身份证号码,在我国身份证号为18为,即使用char,比如姓名,字符长度不一,使用varchar。二进制文本现在使用频率已经大大降低,可以不做硬性要求。
类型 | 范围 | 格式 | 描述 |
date | 1000-01-01至9999-12-31 | yyyy-mm-dd | 日期值 |
time | -838:59:59至838:59:59 | hh:mm:ss | 时间值或持续时间 |
year | 1901至2155 | yyyy | 年份值 |
datetime | 1000-01-01 00:00:00至9999-12-31 23:59:59 | yyyy-mm-dd hh:mm:ss | 混合日期和时间值 |
timestamp | 1970-01-01 00:00:01至2038-01-19 03:14:07 | yyyy-mm-dd hh:mm:ss | 混合日期和时间值,时间戳 |
在日期时间类型中特别注意year的范围是1901-2155,超出范围就需使用date。
数据类型至关重要,不容忽视。