1. ホーム
  2. mysql

[解決済み] MySQL、PostgreSQL、SQLiteのデータベースカラム型の比較?(クロスマッピング)

2023-05-28 17:38:31

質問

私は、以下のような方法を見つけようとしています。 カラムの種類を関連付ける を関連付ける方法を探しています。 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

どのように解決するのですか?

違う方法でやることのリスト。

MySQL の MEDIUMINT は奇妙なカモです(3 バイト)。私ならそれを避けるが、そうでなければそれもINTEGERにマップする。

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では、SERIALデータ型はINTEGERカラムとなり、これはMySQLの

INTEGER PRIMARY KEY AUTO_INCREMENT

PostgresにはBIGSERIAL型もあります。これはSERIALと同じですが、INT型の代わりにBIGINT型があります。

私が逃したもの。

MySQL の INTEGER (別名 INT) を見逃しています。これは pg の INTEGER と同等です。 非常に重要な欠落がある。 VARCHAR と CHAR。意味的には、MySQL と PG の VARCHAR、および MySQL と PG の CHAR は同じですが、MySQL ではこれらの型の最大長はかなり短くなります。MySQLではこれらの型は最大64kb弱、PGでは1Gb(バイト)です。実際の長さ指定は文字数で表されるため、マルチバイトの文字セットがある場合、最大長を最大文字数で割って、その文字セットに指定された理論上の最大長を得る必要があります。SQLiteでは、VARCHARとCHARは両方ともTEXTにマッピングされます。

MySQL と PG の BIT データ型はほぼ同じセマンティクスを持っていますが、MySQL では BIT データ型の最大長は 64(ビット)です。

MySQL の VARBINARY データ型は、PG の BYTEA データ型と最もよく比較できると思います。(しかし、実際に MySQL の BLOB 型もそれにマッピングされます)。

MySQL の FLOAT 型は postgres の REAL と同等であるべきです(SQLite の REAL も同様)。 MySQLのDECIMAL型はpostgresのDECIMALと同等ですが、postgresでは精度に任意の制限がないのに対し、MySQLでは最大精度が(確か)70である点が異なります。(つまり、70の数値位置) MySQLとPostgresの両方において、NUMERICはDECIMAL型のエイリアスです。