在 PostgreSQL 和 MySQL 中,数据库表的常用字段(列)类型的代替

718 阅读2分钟

1. TINYINT

  • MySQL: TINYINT 是一个非常小的整数类型,通常用于存储范围较小的整数(-128 到 127 或 0 到 255)。
  • PostgreSQL: PostgreSQL 没有 TINYINT 类型,但你可以使用 SMALLINT(-32,768 到 32,767)来代替,或者在应用逻辑上确保字段值在 TINYINT 的范围内。

2. MEDIUMINT

  • MySQL: MEDIUMINT 存储的整数范围为 -8,388,608 到 8,388,607(有符号)或 0 到 16,777,215(无符号)。
  • PostgreSQL: PostgreSQL 没有 MEDIUMINT 类型,但你可以使用 INTEGER(-2,147,483,648 到 2,147,483,647)类型来代替。PostgreSQL 本身不支持无符号整数,因此如果需要存储无符号的数字,你可能需要使用 BIGINT 或应用程序级别的验证。
CREATE TABLE example (
    medium_column INTEGER
);

3. DATETIME

  • MySQL: 存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS。最大精度为微秒。
  • PostgreSQLTIMESTAMP 类型提供相同的功能,格式为 YYYY-MM-DD HH:MM:SS,支持精度设置为微秒。PostgreSQL 不区分 DATETIME 和 TIMESTAMP,二者完全等效。
sqlCopy Code
CREATE TABLE example (
    created_at TIMESTAMP
);

4. AUTO_INCREMENT

  • MySQL: AUTO_INCREMENT 是 MySQL 中用于自动生成递增整数值的关键字,通常用于主键。
  • PostgreSQL: PostgreSQL 使用 SERIALBIGSERIAL 数据类型来实现自增字段,或者可以使用 SEQUENCE 配合 DEFAULT nextval('sequence_name')
CREATE TABLE example (
    id SERIAL PRIMARY KEY   -- 使用 SERIAL 代替 AUTO_INCREMENT
);

5. BIT

  • MySQL: BIT 类型用于存储二进制数据,通常用于存储布尔值(0 或 1)或者二进制标志。
  • PostgreSQL: PostgreSQL 使用 BOOLEAN 类型来存储布尔值(TRUEFALSE)。但对于其他二进制数据,可以使用 BIT 类型和 BIT VARYING 类型来存储二进制数据。
  • 有时mysql中也会用integer类型做bool,也要注意转写
CREATE TABLE example (
    is_active BOOLEAN   -- 用 BOOLEAN 类型代替 BIT
);

6. BLOB/TEXT

  • MySQL: BLOBTEXT 类型用于存储大量数据(如图像、文档等)。
  • PostgreSQL: PostgreSQL 没有 BLOB 类型,但它有 BYTEA 类型用于存储二进制数据,TEXT 类型用于存储变长字符串,BYTEA 更常用于代替 BLOB 类型。
CREATE TABLE example (
    data BYTEA  -- 用 BYTEA 类型代替 BLOB
);

7. Unsigned Integer Types

  • MySQL: MySQL 允许将整数类型(如 INT)定义为无符号(UNSIGNED),从而扩展存储范围。
  • PostgreSQL: PostgreSQL 不支持无符号整数类型,因此如果你需要存储无符号整数,需要手动验证数值或者使用 BIGINT 来代替。