PostgreSQL Mysql Veri Tipi Eşleme
Aşağıdaki tabloda PostgreSQL (kaynak) veri türleri ile MySQL veri türleri arasındaki eşleme gösterilmektedir.
Table 10.3 Type mapping
Source Type | MySQL Type | Comment |
---|---|---|
INT | INT | |
SMALLINT | SMALLINT | |
BIGINT | BIGINT | |
SERIAL | INT | Sets AUTO_INCREMENT in its table definition. |
SMALLSERIAL | SMALLINT | Sets AUTO_INCREMENT in its table definition. |
BIGSERIAL | BIGINT | Sets AUTO_INCREMENT in its table definition. |
BIT | BIT | |
BOOLEAN | TINYINT(1) | |
REAL | FLOAT | |
DOUBLE PRECISION | DOUBLE | |
NUMERIC | DECIMAL | |
DECIMAL | DECIMAL | |
MONEY | DECIMAL(19,2) | |
CHAR | CHAR/LONGTEXT | Depending on its length. MySQL Server 5.6 and higher can have CHAR columns with a length up to 255 characters. Anything larger is migrated as LONGTEXT. |
NATIONAL CHARACTER | CHAR/LONGTEXT | Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, a character set of strings depends on the column character set instead of the data type. |
VARCHAR | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. |
NATIONAL CHARACTER VARYING | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, a character set of strings depends on the column character set instead of the data type. |
DATE | DATE | |
TIME | TIME | |
TIMESTAMP | DATETIME | |
INTERVAL | TIME | |
BYTEA | LONGBLOB | |
TEXT | LONGTEXT | |
CIDR | VARCHAR(43) | |
INET | VARCHAR(43) | |
MACADDR | VARCHAR(17) | |
UUID | VARCHAR(36) | |
XML | LONGTEXT | |
JSON | LONGTEXT | |
TSVECTOR | LONGTEXT | |
TSQUERY | LONGTEXT | |
ARRAY | LONGTEXT | |
POINT | POINT | |
LINE | LINESTRING | Although LINE length is infinite, and LINESTRING is finite in MySQL, it is approximated. |
LSEG | LINESTRING | A LSEG is like a LINESTRING with only two points. |
BOX | POLYGON | A BOX is a POLYGON with five points and right angles. |
PATH | LINESTRING | |
POLYGON | POLYGON | |
CIRCLE | POLYGON | A POLYGON is used to approximate a CIRCLE. |
TXID_SNAPSHOT | VARCHAR |
MySQL ve PostgreSQL benzer veri tiplerine sahiptir. Bazıları eşdeğerken diğerleri değildir. MySQL'i PostgreSQL geçişine planlarken, aşağıdaki doğru tip eşleme tablosunu hatırlamak önemlidir:
MySQL | PostgreSQL |
BIGINT | BIGINT |
BINARY(n) | BYTEA |
BIT | BOOLEAN |
CHAR(n), CHARACTER(n) | CHAR(n), CHARACTER(n) |
DATE | DATE |
DATETIME | TIMESTAMP [WITHOUT TIME ZONE] |
DECIMAL(p,s), DEC(p,s) | DECIMAL(p,s), DEC(p,s) |
DOUBLE | DOUBLE PRECISION |
FLOAT | REAL |
INT, INTEGER | INT, INTEGER |
MEDIUMINT | INTEGER |
NUMERIC(p,s) | NUMERIC(p,s) |
SMALLINT | SMALLINT |
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | BYTEA |
TINYINT | SMALLINT |
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT | TEXT |
TIME | TIME [WITHOUT TIME ZONE] |
TIMESTAMP | TIMESTAMP [WITHOUT TIME ZONE] |
VARBINARY(n), VARBINARY(max) | BYTEA |
VARCHAR(n) | VARCHAR(n) |
VARCHAR(max) | TEXT |
MySQL, 'auto_increment' adlı tamsayıya benzer sütunlar için bağımsız değişkene sahiptir; bu, yeni satır eklendiğinde alanın değerini otomatik olarak artırır. PostgreSQL, SERIAL tipini ve değişikliklerini aynı amaçla kullanır:
MySQL | PostgreSQL |
BIGINT AUTO_INCREMENT | BIGSERIAL |
INTEGER AUTO_INCREMENT | SERIAL |
SMALLINT AUTO_INCREMENT | SMALLSERIAL |
TINYINT AUTO_INCREMENT | SMALLSERIAL |
PostgreSQL'in aksine, tüm MySQL tamsayı türleri (tinyint, smallint, int, bigint) UNSIGNED özniteliğine sahip olabilir. İmzasız spesifikasyon, yalnızca daha geniş kabul edilebilir değer aralığı ile pozitif sayılar almaya zorlar. MySQL imzasız tiplerin PostgreSQL ile nasıl eşleştirilmesi gerektiği aşağıda açıklanmıştır:
MySQL | PostgreSQL |
BIGINT UNSIGNED | NUMERIC(20) |
INT UNSIGNED | BIGINT |
MEDIUMINT UNSIGNED | INTEGER |
SMALLINT UNSIGNED | INTEGER |
TINYINT UNSIGNED | INTEGER |
Tipleri eşlerken karşılaşılan bir diğer zorluk da PostgreSQL'in aksine MySQL'in '0000-00-00' tarih sütunlarına depolamaya izin verdiğini hatırlamaktır. PostgreSQL uzmanları, MySQL'den veri taşırken bu değerleri NULL ile değiştirmeyi önerir. Ancak, bu yaklaşım bir şekilde veritabanı mantığını bozarsa, bu tarih sütunları için başka bir eşleme kullanmayı düşünmelisiniz.
Kaynak