Сравнение типов столбца базы данных в MySQL, PostgreSQL и SQLite? (Перекрестное отображение)

Я пытаюсь найти некоторый способ связать типы столбца через наиболее используемые Базы данных: MySQL, PostgreSQL и SQLite.

Вот то, что я имею до сих пор, но я боюсь, что это не сделано, и мне нужны некоторые люди с большим опытом помочь мне закончить любые недостающие типы.

MySQL                   PostgreSQL          SQLite

TINYINT                 SMALLINT            INTEGER
SMALLINT                SMALLINT
MEDIUMINT               INTEGER
BIGINT                  BIGINT
BIT                     BIT                 INTEGER
_______________________________________________________

TINYINT UNSIGNED        SMALLINT            INTEGER
SMALLINT UNSIGNED       INTEGER
MEDIUMINT UNSIGNED      INTEGER
INT UNSIGNED            BIGINT
BIGINT UNSIGNED         NUMERIC(20)
_______________________________________________________

DOUBLE                  DOUBLE PRECISION    REAL
FLOAT                   REAL                REAL
DECIMAL                 DECIMAL             REAL
NUMERIC                 NUMERIC             REAL
_______________________________________________________

BOOLEAN                 BOOLEAN             INTEGER
_______________________________________________________

DATE                    DATE                TEXT
TIME                    TIME
DATETIME                TIMESTAMP
_______________________________________________________

TIMESTAMP DEFAULT       TIMESTAMP DEFAULT   TEXT
NOW()                   NOW()   
_______________________________________________________

LONGTEXT                TEXT                TEXT
MEDIUMTEXT              TEXT                TEXT
BLOB                    BYTEA               BLOB
VARCHAR                 VARCHAR             TEXT
CHAR                    CHAR                TEXT
_______________________________________________________

columnname INT          columnname SERIAL   INTEGER PRIMARY 
AUTO_INCREMENT                              KEY AUTOINCREMENT

65
задан 3 revs 1 January 2010 в 20:30
поделиться

1 ответ

Список вещей, которые я бы сделал иначе:

MEDIUMINT в MySQL - это странная утка (3 байта). Я бы избегал этого, но в противном случае также сопоставил бы его с INTEGER.

MySQL BOOLEAN (псевдоним BOOL, псевдоним TINYINT (1)) несовместим с логическим типом pg. Вы можете или не сможете переносить приложения в зависимости от того, что они используют в качестве логических литералов. В MySQL TRUE и FALSE сопоставляются с целочисленными значениями 1 и 0. Похоже, что тип pg BOOLEAN использует нотацию строкового литерала. Таким образом, приложения могут быть или не быть переносимыми - по крайней мере, это не замена.

Наконец, для последней строки в вашей таблице, я думаю, фраза SQLite должна читаться так:

INTEGER PRIMARY KEY AUTOINCREMENT

Это примерно эквивалентно

BIGINT PRIMARY KEY AUTO_INCREMENT

в MySQL. В postgres тип данных SERIAL приводит к столбцу INTEGER, и он будет примерно таким же, как MySQL

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres также имеет тип BIGSERIAL, то же самое, что и SERIAL, но с типом BIGINT вместо типа INT.

Что я пропустил:

Мне не хватает INTEGER (псевдоним INT) для MySQL. Это сопоставимо с INTEGER на стр. Очень важные упущения: VARCHAR и CHAR. Семантически VARCHAR в MySQL и PG и CHAR в MySQL и PG одинаковы, но в MySQL эти типы имеют гораздо меньшую максимальную длину. В MySQL эти типы могут иметь максимум чуть меньше 64 КБ, в pg 1 ГБ (байты). Спецификатор фактической длины выражается в количестве символов, поэтому, если у вас есть многобайтовый набор символов, вы должны разделить максимальную длину на максимальное количество символов, чтобы получить теоретическую максимальную длину, указанную для этого набора символов. В SQLite, VARCHAR и CHAR сопоставляются с TEXT

Типы данных BIT в MySQL и PG имеют примерно одинаковую семантику, но в MySQL максимальная длина типа данных BIT составляет 64 (бит)

Я думаю, что MySQL VARBINARY Тип данных лучше всего сопоставим с типом данных PG BYTEA. (но действительно MySQL ' Тип DECIMAL в MySQL эквивалентен DECIMAL в postgres, за исключением того, что в postgres тип не накладывает произвольных ограничений на точность, тогда как в MySQL максимальная точность составляет (я считаю) 70 (то есть 70 числовых позиций). И для MySQL, и для Postgres NUMERIC является псевдонимом для типа DECIMAL.

15
ответ дан 24 November 2019 в 15:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: