Подтвердить что ты не робот

Сравнение типов столбцов базы данных в 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
4b9b3361

Ответ 1

Список вещей, которые я бы сделал по-другому:

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

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

Наконец, для последней строки в вашем tabl я думаю, что фраза 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 эти типы могут иметь максимум немного меньше, чем 64kb, в pg 1Gb (байты). Фактический спецификатор длины выражается в количестве символов, поэтому, если у вас есть многобайтовый набор символов, вы должны разделить максимальную длину на максимальное количество символов, чтобы получить теоретическую максимальную длину, указанную для этого набора символов. В SQLite, VARCHAR и CHAR отобразите оба значения в TEXT

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

Я думаю, что тип данных MySQL VARBINARY лучше всего сопоставляется с типом данных PG BYTEA. (но на самом деле MySQL BLOB-типы также сопоставляются с этим)

Тип FLOAT в MySQL должен быть эквивалентен REAL в postgres (и REAL в SQLite тоже) Тип DECIMAL в MySQL эквивалентен DECIMAL в postgres, за исключением того, что в postgres тип не налагает произвольный предел точности, тогда как в MySQL максимальная точность (я считаю) 70. (то есть 70 позиций позиций) Для MySQL и Postgres NUMERIC является псевдонимом для типа DECIMAL.