[解決済み] 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
どのように解決するのですか?
違う方法でやることのリスト。
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型のエイリアスです。
関連
-
MySQLのLike演算子に関する詳細
-
MySQLデータ型の詳細
-
MySQL サービスとデータベース管理
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
PostMan レポート エラー: 接続 ECONNREFUSED 127.0.0.1:port number
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] なぜPostgreSQLでは符号なし整数が使えないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLのselect、distinct、limitの使い方
-
MySQLデータ型の詳細
-
MySQLインデックスベースストレステストの実装
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
SQLステートメントエラーです。オペランドには 1 つのカラムを含める必要があります [括弧を追加せずに複数のフィールドをクエリする
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] SQLITE SQLダンプファイルをPOSTGRESQLに変換する