Сравнение типов столбцов базы данных в 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 ответ:
список вещей, которые я бы сделал по-другому:
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.