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

1 ответ:

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

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

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

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

INTEGER PRIMARY KEY AUTOINCREMENT

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

BIGINT PRIMARY KEY AUTO_INCREMENT

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

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres также имеет тип BIGSERIAL, который такой же, как серийный, но с типом BIGINT вместо Тип INT.

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

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

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

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

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