sql >> データベース >  >> RDS >> PostgreSQL

MySQL、PostgreSQL、SQLiteのデータベース列タイプの比較? (クロスマッピング)

    別の方法で行うことのリスト:

    MySQLのMEDIUMINTは奇妙なアヒル(3バイト)です。私はそれを避けますが、そうでなければINTEGERにもマップします。

    MySQL BOOLEAN(エイリアスBOOL、エイリアスTINYINT(1))は、pgブール型と互換性がありません。ブールリテラルとして使用するものに応じて、アプリを移植できる場合とできない場合があります。 MySQLでは、TRUEとFALSEは1と0の整数値にマップされます。 pgBOOLEAN型は文字列リテラル表記を使用しているようです。そのため、アプリは移植可能である場合とそうでない場合があります。少なくとも、代替品のドロップはありません。

    最後に、表の最後の行について、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.Veryimportantの省略:VARCHARおよびCHARのINTEGERに相当します。意味的には、MySQLとPGのVARCHAR、およびMySQLとPGのCHARは同じですが、MySQLではこれらのタイプの最大長ははるかに短くなっています。 MySQLでは、これらのタイプは1Gb(バイト)で最大64kb弱になる可能性があります。実際の長さ指定子は文字数で表されるため、マルチバイト文字セットがある場合は、最大長を最大文字数で割って、その文字セットに指定された理論上の最大長を取得する必要があります。 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型のエイリアスです。




    1. MySQLで文字列のビット数を取得する方法– BIT_LENGTH()

    2. SQLiteとカスタムオーダー

    3. Ora-01427の単一行サブクエリがselectで複数の行を返す問題を修正するにはどうすればよいですか?

    4. SQL Server 2016EnterpriseEditionのパフォーマンス上の利点