diff --git a/MySQL/12. 字段类型.md b/MySQL/12. 字段类型.md new file mode 100644 index 0000000..12ec731 --- /dev/null +++ b/MySQL/12. 字段类型.md @@ -0,0 +1,127 @@ +# 字段类型 + +- 数值类型 + - 整型 + - `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` 存储 \ No newline at end of file