每一列都有一个 数据类型,定义它存储的内容——数字、文本、日期、布尔值等。选择正确的类型对 存储效率、正确性和性能 很重要。不同数据库的类型略有差异,但这些类别是标准的。
数值类型
(,)
SERIAL AUTO_INCREMENT
每一列都有一个 数据类型,定义它存储的内容——数字、文本、日期、布尔值等。选择正确的类型对 存储效率、正确性和性能 很重要。不同数据库的类型略有差异,但这些类别是标准的。
(,)
SERIAL AUTO_INCREMENT
重要提示: 使用 DECIMAL/NUMERIC 处理金钱(精确运算),永远不要使用 FLOAT/DOUBLE(存在四舍五入错误,会破坏财务计算)。
VARCHAR(n) -- variable-length text up to n chars (the common choice)
CHAR(n) -- FIXED-length (padded) — for codes of known length (e.g. country codes)
TEXT -- large/unlimited text (articles, descriptions)
VARCHAR(n) 是常用的文本类型;TEXT 用于大型内容;CHAR(n) 用于定长代码。
DATE -- date only (2024-01-15)
TIME -- time only
TIMESTAMP -- date + time (with or WITHOUT time zone — TIMESTAMPTZ in Postgres)
BOOLEAN -- true/false
UUID -- universally unique identifier (good for distributed IDs)
JSON / JSONB -- structured JSON data (JSONB in Postgres is indexed/efficient)
BLOB / BYTEA -- binary data
✓ Storage — smaller types use less space (INT vs BIGINT; VARCHAR vs TEXT)
✓ Correctness — DECIMAL for money (exact), proper date types for dates, BOOLEAN for flags
✓ Performance — correct types index and compare efficiently; right size = less I/O
✓ Validation — the type itself constrains what can be stored (an INT can't hold text)
✓ Time zones — use TIMESTAMPTZ for timestamps to avoid time-zone bugs
选择适当的数据类型是数据库设计的一个基础方面,影响 存储、正确性和性能,因此了解常见类型及其选择方法是重要的日常知识。
掌握各种类别——数值型(INT、BIGINT、DECIMAL、FLOAT)、文本型(VARCHAR、CHAR、TEXT)、日期/时间型(DATE、TIMESTAMP)、布尔型,以及特殊类型(UUID、JSON/JSONB)——对于正确设计表是必要的。
某些选择具有重要的实际后果:为金钱使用 DECIMAL/NUMERIC 而不是 FLOAT(这是一个严重的正确性问题——浮点数四舍五入错误会破坏财务计算,这是一个经典的严重错误)、选择正确的 整数大小(对于可能超出 INT 范围的 ID 使用 BIGINT——这对大表来说是一个真实的问题)、使用适当的 日期/时间类型(特别是时区感知的 TIMESTAMPTZ 以避免时区错误),以及选择合适大小的文本类型(VARCHAR 与 TEXT)。
正确的类型选择影响存储效率(较小的类型使用更少的空间和 I/O)、正确性(类型验证和精确表示数据)和性能(适当的类型能够高效地索引和比较)。
由于每一列都需要进行类型选择,而且选择错误会导致真实问题(用 FLOAT 处理金钱会破坏计算、INT 溢出导致 ID 问题、时区错误),理解常见的 SQL 数据类型及选择原则——金钱使用精确算术、适当的大小调整、时区感知的时间戳——是正确数据库设计的重要基础知识,有助于避免一类微妙但严重的数据正确性和性能问题。