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