# 字段类型 - 数值类型 - 整型 - `TINYINT` - `SMALLINT` - `MEDIUMINT` - `INT` - `BIGINT` - 浮点型 - `FLOAT` - `DOUBLE` - 定点型 - `DECIMAL` - 字符串类型 - 常用 - `CHAR` - `VARCHAR` - TEXT 类 - `TINYTEXT` - `TEXT` - `MEDIUMTEXT` - `LONGTEXT` - BLOB 类 - `TINYBLOB` - `BLOB` - `MEDIUMBLOB` - `LONGBLOB` - 日期时间类型 - `YEAR` - `TIME` - `DATE` - `DATETIME` - `TIMESTAMP` **`UNSIGNED` 熟悉有什么用** - `ID` - 不允许负值 - 允许更高的上限范围 **`CHAR` 和 `VARCHAR` 的区别** - `CHAR` - 定长 - 存储时填充空格 - 适用:加密后密码、身份证号码 - `VACHAR` - 需要额外一个或两个字节记录字符串长度 - 适用:商品名称、用户昵称 **`VARCHAR(100)` 和 `VARCHAR(10)` 的区别** - 磁盘空间 - 无区别 - 内存空间 - 有差异 - 排序时按照最大长度进行 **`DECIMAL` 和 `FLOAT/DOUBLE` 的区别** - 定点数 - 存储有精度要求的小数 - 货币 - 浮点数 - 存储近似的小数值 - `0.1f + 0.2f != 0.3f` **为什么不推荐使用 `TEXT` 和 `BLOB`** | 类型 | 可存储大小| 用途 | | --- | ---| --- | | TINYTEXT | 0-255 字节 | 一般文本字符串 | | TEXT | 0-65,535 字节 | 长文本字符串 | | MEDIUMTEXT | 0-16,772,150 字节 | 较大文本数据 | | LONGTEXT | 0-4,294,967,295 字节 | 极大文本数据 | 类型 |可存储大小 | 用途 | |---|---|---| | TINYBLOB | 0-255 字节 | 短文本二进制字符串 | BLOB | 0-65KB | 二进制字符串 | MEDIUMBLOB | 0-16MB | 二进制形式的长文本数据 | LONGBLOB | 0-4GB | 二进制形式的极大文本数据 数据库规范不推荐使用—— - 不能有默认值 - 检索效率低 - 不能直接创建索引 - 可能会消耗大量 IO 资源 - 导致表上的 SQL 变慢 **`DATETIME` 和 `TIMESTAMP` 的区别** - `DATETIME` - 没有时区信息 - `TIMESTAMP` - 有时区信息 **`NULL` 和 '' 的区别** - `NULL` - 不确定的值 - 不等于任何值 - 大多数聚合函数会忽略 - '' - 空字符串 - 已知的值 **`Boolean` 类型如何表示** - `TINYINT(1)` **手机号存储使用 `INT` 还是 `VARCHAR`** `VARCHAR` - 格式性 - 前导零 - 分隔符 - 前缀 - 非算数性 - 不需要数学运算 - 查询灵活性 - `LIKE` 直观高效 - 加密 - 加密后长度无法用 `INT/BIGINT` 存储