0Pricing
SQL Academy · 课时

数据类型概览: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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是 RDBMS,以及表为何重要
  2. 主键与唯一性
  3. NULL:第三种真值
  4. 数据类型概览:INT VARCHAR DATE BOOLEAN
← 返回 SQL Academy