---
# System prepended metadata

title: 資料型態
tags: [資料庫相關]

---

# 資料型態
https://www.youtube.com/watch?v=W_v05d_2RTo

1. 、INT：如无特殊需要，存放整型数字使用 UNSIGNED INT 型，整型字段后的数字代表显示长度。比如 id int(11) NOT NULL
 
2. 、DATETIME：所有需要精确到时间 (时分秒) 的字段均使用 DATETIME, 不要使用 TIMESTAMP 类型。
 
 对于 TIMESTAMP，它把写入的时间从当前时区转化为 UTC（世界标准时间）进行存储。查询时，将其又转化为客户端当前时区进行返回。而对于 DATETIME，不做任何改变，基本上是原样输入和输出。
 
另外 DATETIME 存储的范围也比较大：

timestamp 所能存储的时间范围为：’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。
 
 datetime 所能存储的时间范围为：’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。

但是特殊情况，对于跨时区的业务，TIMESTAMP 更为合适。
 
3. VARCHAR：所有动态长度字符串 全部使用 VARCHAR 类型，类似于状态等有限类别的字段，也使用可以比较明显表示出实际意义的字符串，而不应该使用 INT 之类的数字来代替；VARCHAR(N)
 N 表示的是字符数而不是字节数。比如 VARCHAR(255)，可以最大可存储 255 个字符（字符包括英文字母，汉字，特殊字符等）。但 N 应尽可能小，因为 MySQL 一个表中所有的 VARCHAR 字段最大长度是 65535 个字节，且存储字符个数由所选字符集决定。
 如 UTF8 存储一个字符最大要 3 个字节，那么 varchar 在存放占用 3 个字节长度的字符时不应超过 21845 个字符。同时，在进行排序和创建临时表一类的内存操作时，会使用 N 的长度申请内存。(如无特殊需要，原则上单个 varchar 型字段不允许超过 255 个字符)

4. 、TEXT：仅仅当字符数量可能超过 20000 个的时候，才可以使用 TEXT 类型来存放字符类数据，因为所有 MySQL 数据库都会使用 UTF8 字符集。

 所有使用 TEXT 类型的字段必须和原表进行分拆，与原表主键单独组成另外一个表进行存放，与大文本字段的隔离，目的是。如无特殊需要，不使用 MEDIUMTEXT、TEXT、LONGTEXT 类型

5. 、对于精确浮点型数据存储，需要使用 DECIMAL，严禁使用 FLOAT 和 DOUBLE。

6. 、如无特殊需要，尽量不使用 BLOB 类型
 
7. 、如无特殊需要，字段建议使用 NOT NULL 属性，可用默认值代替 NULL

8. 、自增字段类型必须是整型且必须为 UNSIGNED，推荐类型为 INT 或 BIGINT，并且自增字段必须是主键或者主键的一部分。


###### tags: `資料庫相關`