Traffine I/O

日本語

2023-03-10

MySQLとPostgreSQL間のデータ型の比較

はじめに

MySQLとPostgreSQLは、データベースシステムとして、それぞれ独自の特性と制約を持つさまざまなデータ型を提供しています。

この記事では、MySQLとPostgreSQL間のデータ型を比較します。以下は比較表です。

MySQL(容量) PostgreSQL(容量)
TINYINT (1B) -
SMALLINT (2B) SMALLINT (2B)
INT (4B) INT (4B)
BIGINT (8B) BIGINT (8B)
FLOAT (4B) NUMERIC (4B)
DATE DATE
DATETIME -
TIME TIME
TIMESTAMP TIMESTAMP
CHAR (255B) CHAR (1GB)
VARCHAR (65KB) VARCHAR (1GB)
TINYTEXT (255B) -
TEXT (65KB) TEXT (1GB)
MEDIUMTEXT (16MB) -
LONGTEXT (4GB) -

数値データ型のマッピング

まず、MySQLとPostgreSQLの数値データ型のマッピングを紹介します。

MySQLのTINYINT

MySQLでは、TINYINTは小さな整数データ型です。サイズは1バイトで、符号付きの場合は-128から127までの範囲、符号なしの場合は0から255までの範囲を許容します。一方、PostgreSQLにはTINYINTに直接対応するものはありませんが、コンテキストによってはSMALLINT型やBOOLEAN型を使用して近似することがあります。

MySQLとPostgreSQLのSMALLINT

MySQLとPostgreSQLの両方にSMALLINT型があります。MySQLでは、SMALLINTは2バイトの整数型です。符号なしの場合、0から65535までの数字を格納できます。符号付きの場合(デフォルト)、範囲は-32768から32767までです。PostgreSQLのSMALLINT型はMySQLと完全に一致しており、2バイトのストレージを使用し、同じ範囲の値をサポートしています。

MySQLとPostgreSQLのINT

INTはMySQLとPostgreSQLの両方でよく使用される整数データ型です。4バイトのストレージを使用します。MySQLのINTの値の範囲は、符号付き値の場合は-2147483648から2147483647まで、符号なしの値の場合は0から4294967295までです。PostgreSQLには符号なしの整数型はありませんが、INT型はMySQLの符号付きINTと範囲が一致しており、一般的な用途に対して互換性を提供します。

MySQLとPostgreSQLのBIGINT

BIGINTはMySQLとPostgreSQLの両方で最大の整数型です。8バイトのストレージを使用します。MySQLの符号付きBIGINTの範囲は-9223372036854775808から9223372036854775807です。符号なしのBIGINTの範囲は0から18446744073709551615です。INT型と同様に、PostgreSQLのBIGINT型はMySQLの符号付きBIGINTと同じ範囲を持っています。

MySQLのFLOATとPostgreSQLのNUMERIC

MySQLのFLOATは4バイトの浮動小数点数です。小数値を格納でき、正確な範囲は特定の値によって異なります。一方、PostgreSQLのNUMERIC型は、非常に多くの桁数の数字を正確に格納できます。サイズは異なりますが、通常MySQLのFLOATに格納されるようなデータを快適に扱うことができます。

日付と時刻データ型のマッピング

日付と時刻の表現は、イベントの記録、活動の追跡、時系列分析など、データベースにおいて重要な側面です。ここでは、MySQLとPostgreSQLがこれらのデータ型のマッピングをどのように扱うかを見ていきます。

MySQLとPostgreSQLのDATE

MySQLとPostgreSQLの両方で、DATEデータ型は日付を格納するために使用されます。年、月、日を保持し、フォーマットはYYYY-MM-DDです。MySQLでは、範囲は「1000-01-01」から「9999-12-31」までですが、PostgreSQLでは範囲が「紀元前4713年」から「西暦5874897年」まで広がっています。

MySQLのDATETIME

DATETIMEはMySQLのデータ型で、日付と時刻を格納するために使用されます。範囲は「1000-01-01 00:00:00」から「9999-12-31 23:59:59」です。このデータ型は、時間の特定のポイントを正確に格納するために非常に便利です。一方、PostgreSQLにはDATETIMEデータ型に相当する型はありません。代わりに、同様の目的でTIMESTAMP WITHOUT TIME ZONEを使用します。

MySQLとPostgreSQLのTIME

TIMEデータ型は、MySQLとPostgreSQLの両方で一日の時間を表現するために使用されます。MySQLでは、TIMEは期間または一日の時間を表すことができ、範囲は「-838:59:59」から「838:59:59」です。一方、PostgreSQLのTIMEはタイムゾーンなしで一日の時間を格納することができ、範囲は「00:00:00」から「24:00:00」です。

MySQLとPostgreSQLのTIMESTAMP

MySQLとPostgreSQLの両方でTIMESTAMPデータ型がサポートされています。MySQLでは、TIMESTAMPは日付と時刻のペアを格納するために使用されます。範囲は「1970-01-01 00:00:01」UTCから「2038-01-19 03:14:07」UTCまでです。対照的に、PostgreSQLのTIMESTAMPは紀元前4713年から294276年までの日付と時刻を保持することができます。PostgreSQLは、TIMESTAMP WITH TIME ZONETIMESTAMP WITHOUT TIME ZONEの両方をサポートしており、より柔軟性があります。

文字列データ型のマッピング

文字列データの格納と操作は、データベースにおいて一般的なタスクです。

MySQLとPostgreSQLのCHAR

MySQLでは、CHARデータ型は固定長の文字列を格納するために使用されます。長さはバイト単位で指定され、0から255バイトの範囲で指定できます。PostgreSQLのCHAR(またはCHARACTER)も同様に動作しますが、1GBという大きな最大長さが特徴です。

MySQLとPostgreSQLのVARCHAR

MySQLとPostgreSQLのVARCHARデータ型は可変長の文字列を格納するために使用されます。MySQLのVARCHARは最大65,535バイトのデータを格納できますが、PostgreSQLのVARCHAR(またはCHARACTER VARYING)は最大1GBのデータを格納できます。

MySQLのTINYTEXT

TINYTEXTはMySQL固有の型で、可変長の文字列を格納するために使用されます。最大255バイトのデータを格納することができます。PostgreSQLには直接的な相当する型はありませんが、同様の用途はTEXTでカバーすることができます。

MySQLとPostgreSQLのTEXT

MySQLでは、TEXTデータ型は最大長が65,535バイトまでの可変長の文字列を格納するために使用されます。PostgreSQLもTEXTデータ型を提供していますが、最大1GBの文字列を格納することができます。データ容量の違いはデータベースの移行時に考慮する必要があるかもしれません。

MySQLのMEDIUMTEXT

MySQLのMEDIUMTEXTデータ型は、16,777,215バイト(または16MB)までの可変長の文字列を格納するために使用されます。MEDIUMTEXTに直接相当するものはPostgreSQLにはありませんが、一般的なTEXT型は大容量のデータを扱うことができますので、同様のデータを処理することができます。

MySQLのLONGTEXT

LONGTEXTはMySQLのデータ型で、非常に大量のテキストを格納するために使用されます。最大長は4,294,967,295バイト(または4GB)です。PostgreSQLには直接的なLONGTEXT型の相当はありませんが、PostgreSQLのTEXT型は通常のアプリケーションには十分な1GBの容量を持っているため、ほとんどの用途に対して適しています。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!