数据类型概览:INT VARCHAR DATE BOOLEAN
学习核心 SQL 数据类型:整数、varchar/text、日期与时间戳、布尔值和小数,并了解如何为每列选择正确的类型。
数据类型概览:INT VARCHAR DATE BOOLEAN 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
类型为什么重要
每一列都有固定类型。类型决定:
- 哪些值是有效的
- 每行需要占用多少存储空间
- 哪些运算符和函数适用
- 规划器如何选择索引和连接方式
整数类型
PostgreSQL 有三种整数大小:
SMALLINT -- 2 bytes, -32768 to 32767
INTEGER -- 4 bytes, ±2.1 billion (alias: INT)
BIGINT -- 8 bytes, ±9.2 quintillion
-- Auto-incrementing variants:
SMALLSERIAL BIGSERIAL SERIAL数值型 / 十进制数
对于金额和精确的小数,请使用 NUMERIC(precision, scale)——不要使用 FLOAT。
CREATE TABLE invoices (
id BIGSERIAL PRIMARY KEY,
amount NUMERIC(12, 2) NOT NULL, -- up to 10 digits + 2 decimals
tax_rate NUMERIC(5, 4) NOT NULL -- 0.0875 = 8.75%
);FLOAT 与 NUMERIC
REAL(4 字节)和 DOUBLE PRECISION(8 字节)都是不精确的——它们会对二进制小数进行舍入。它们适合科学计算,却非常不适合金额。
-- Inexact:
SELECT 0.1::FLOAT + 0.2::FLOAT; -- 0.30000000000000004
-- Exact:
SELECT 0.1::NUMERIC + 0.2::NUMERIC; -- 0.3文本类型:VARCHAR 与 TEXT
PostgreSQL 有两种主要的文本类型:
-- VARCHAR(n) — variable-length, max n characters
email VARCHAR(255)
-- TEXT — variable-length, no declared limit
description TEXT
-- In PostgreSQL both have the same performance.
-- VARCHAR(n) just adds a length check.
-- CHAR(n) (fixed-length, blank-padded) — avoid.日期与时间
请使用日期/时间类型——永远不要将日期存储为字符串:
DATE -- 2024-03-15
TIME -- 14:30:00
TIMESTAMP -- 2024-03-15 14:30:00 (no time zone)
TIMESTAMPTZ -- 2024-03-15 14:30:00+02 (recommended)
INTERVAL -- 1 day, 3 hours
-- Prefer TIMESTAMPTZ unless you have a strong reason not to.布尔值
BOOLEAN 存储 TRUE、FALSE 或 NULL。
CREATE TABLE tasks (
id BIGSERIAL PRIMARY KEY,
done BOOLEAN NOT NULL DEFAULT false
);
SELECT * FROM tasks WHERE done; -- shorthand for done = true
SELECT * FROM tasks WHERE NOT done;UUID
对于全局唯一的标识符:
CREATE TABLE api_keys (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);JSON 与 JSONB
对于半结构化文档:
-- JSON — text, preserves whitespace, no index
-- JSONB — binary, deduplicated keys, indexable with GIN
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
payload JSONB NOT NULL
);数组
PostgreSQL 的列可以是任意基础类型的数组:
CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
tags TEXT[] NOT NULL DEFAULT '{}'
);
INSERT INTO posts (title, tags) VALUES
('Hello', ARRAY['sql', 'intro']);
SELECT * FROM posts WHERE 'sql' = ANY(tags);选择正确的类型
经验法则:
- 金额 →
NUMERIC(不要使用FLOAT) - ID →
BIGSERIAL或UUID - 日期 → 事件使用
TIMESTAMPTZ,日历日期使用DATE - 短代码 →
VARCHAR(n);长文本 →TEXT - 标志 →
BOOLEAN
总结
请选择能够满足需求的最小类型。
- 正确的类型 = 更小的索引、更好的统计信息、更少的错误
- 精确小数使用 NUMERIC
- 事件时间戳使用 TIMESTAMPTZ
- 避免将有明确类型的数据存储为字符串——否则会失去验证和索引能力
快速检查
您需要存储商品价格,应该选择哪种类型?
常见问题解答
「数据类型概览:INT VARCHAR DATE BOOLEAN」课时是免费的吗?
是的 — 「数据类型概览:INT VARCHAR DATE BOOLEAN」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「数据类型概览:INT VARCHAR DATE BOOLEAN」这节课中我会学到什么?
学习核心 SQL 数据类型:整数、varchar/text、日期与时间戳、布尔值和小数,并了解如何为每列选择正确的类型。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「数据类型概览:INT VARCHAR DATE BOOLEAN」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是 RDBMS,以及表为何重要
- 主键与唯一性
- NULL:第三种真值
- 数据类型概览:INT VARCHAR DATE BOOLEAN