跳到主要内容

PostgreSQL 字符类型教程

PostgreSQL 的字符类型有 CHAR(n)、VARCHAR(n)、TEXT 三种,以及定长/变长的存储差异。实践中 TEXT 几乎总是正确选择。

本篇内容​

  • CHAR(n) / VARCHAR(n) / TEXT 的语义
  • 长度限制与超长报错
  • 字符集与排序规则(collation)
  • 性能差异与选型建议

三种字符类型​

CREATE TABLE users (
-- CHAR(n):定长,不足补空格,查询时会去掉尾部空格
code CHAR(6),
-- VARCHAR(n):变长,带长度限制
name VARCHAR(50) NOT NULL,
-- TEXT:变长,无长度限制(PostgreSQL 中与 VARCHAR 性能几乎相同)
bio TEXT
);

长度与截断​

-- 超长直接报错,不会静默截断
INSERT INTO users (name) VALUES (repeat('A', 100)); -- ERROR: value too long

-- 查看字符长度(字符数,不是字节数)
SELECT char_length(name), octet_length(name) FROM users;

-- 显式截断
SELECT left(name, 10) FROM users;
待补充(TODO)
  • 补充:字符集(UTF-8)与多字节字符的长度语义
  • 补充:排序规则 collation 对大小写、中文排序和唯一索引的影响
  • 补充:TEXT 与 VARCHAR(n) 在存储和索引上的真实差异
  • 补充:模式匹配(LIKE / 正则)与前缀索引(text_pattern_ops)