ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 数据类型 [TOC] ## 列属性 | 名称 | 描述| | --- | --- | | auto_increment | 自增数 | | default | 默认值 | | not null | 不为空 | | zerofill | 填充零 | ## 整数类型 | 名称 | 大小 | 范围 | 范围(无符号)| | --- | --- | --- | --- | | tiny INT | 1个字节 | -128, 127 | 0, 255| | small INT | 2个字节 | -32768, 32767 | 0, 65535| | medium INT | 3个字节 | -8388608, 8388607 | 0, 16777215| | INT |INT eger | 4个字节 | -2147483648, 2147483647 | 0, 4294967295| | big INT | 8个字节 | 超大整数 | | * int(0) : 显示数字的宽度,不限制值的大小 * 以上可配合 unsigned (无符号) 非负数, zerofill :0填充 ***** ## 实数类型 - 浮点 | 名称 | 大小 | 类型| 范围| | --- | --- | --- | --- | | float | 4个字节 | 单精度 | 255, 30| | double | 8个字节 | 双精度 | 255, 30| | decimal | | 定点型 | 65, 30| * float数值类型用于表示单精度浮点数值 * double数值类型用于表示双精度浮点数值 * float和double都是浮点型,而decimal是定点型; ` 单精度浮点数用4字节(32bit)表示浮点数,格式是:1位符号位 8位表示指数 23位表示尾数 ` ` 双精度浮点数8字节(64bit)表示实数,格式是:1位符号位 11位表示指数 52位表示尾数 ` > 7.22 转成 二进制 111.00111000010100011110101110000101000111101011100001 > 可发现无论是单精度还是双精度浮点数表示都会产生误差,只是程度不同 > 因此在计算时特别注意浮点数 > deicmal 可以存储比bigint还大的整数,也可存储精确的小数 **decimal** ``` MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储`DECIMAL`值。它将`9`位数字包装成`4`个字节。 对于每个部分,需要`4`个字节来存储`9`位数的每个倍数。剩余数字所需的存储如下表所示: | 剩余数字 | 位 | | --- | --- | | 0 | 0 | | 1–2 | 1 | | 3–4 | 2 | | 5–6 | 3 | | 7-9 | 4 | 例如,`DECIMAL(19,9)`对于小数部分具有`9`位数字,对于整数部分具有`19`位= `10`位数字,小数部分需要`4`个字节。 整数部分对于前`9`位数字需要`4`个字节,`1`个剩余字节需要`1`个字节。`DECIMAL(19,9)`列总共需要`9`个字节。 ``` **** ## 字符串类型 | 名称 | 大小 | 描述及存储需求 | | --- | --- | --- | | varchar | M | M为0~65536之间的整数| | char | M | M为0~255之间的整数| | tiny text | | 允许长度0~255字节| | text | | 允许长度0~65535字节| | tiny blob | | 允许长度0~255字节| | blob | | 允许长度0~65535字节| > varchar 用于存储可变长字符串,它比定长类型更节省空间,varchar使用1或2个额外字节记录字符串长度,列长度小于255字节,使用1个字节表示,否则用2个 > char 是定长的,根据定义的字符串长度分配足够的空间,会根据需要采用`空格`进行填充以方便比较, char 适合存储很短的字符串,或者所有值都接近同一个长度 >* varchar(n) 和 char(n) 可以存储的中文字符数和英文字符数是一致的,都是n个字符 >* 4.x版本是通过字节数表示,5.x版本是表示字符数 * char 和 varchar 存储超过设定的长度时 都会被截断 * 对于非常短的列,char比varchar在存储空间上更有效率 * 在检索的时候,char列会删除尾部的空格而varchar则保留了这些空格 > text 以字符串存储,blob 以二进制存储。 **** ## 枚举类型 | 名称 | 大小 | 描述及存储需求 | | --- | --- | --- | | enum | 2个字节 | 内部存储整数| * 共有2 个字节,0-65535,因此可以有 65535个选项可以使用 * 可插入常量相等的索引数值: 从1开始 > 不使用数字作为enum枚举的常量,易混乱 > 排序是按照内部存储的整数进行排序 **** ## 时间类型 | 名称 | 大小 | 格式 | | --- | --- | --- | | datetime | 8个字节 | YYYY-MM-DD HH:MM:SS | | timestamp | 4个字节 | YYYY-MM-DD HH:MM:SS| | date | 4个字节 |  YYYY-MM-DD| | time | 3个字节 | HH:MM:SS| | year | 1个字节 | YYYY| * datetime 是原样输入输出,timestamp 是把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。 * timestamp 最大范围是到2038年某个时刻 > timestamp 比datetime 效率更高 > `CURRENT_TIMESTAMP`表示使用`CURRENT_TIMESTAMP()`函数来获取当前时间,类似于NOW()函数 > 用整数保存时间戳的格式不方便处理 > 存储微秒,可以使用bigint存储