TOPサーバ構築・運用> 文字データ型について
徹底比較!! PostgreSQL vs MySQLパート2
徹底比較!! PostgreSQL vs MySQLパート2

第1回:同じようで違うデータ型
著者:NTTデータ   藤塚 勤也   2007/4/2
前のページ  1  2  3  次のページ
文字データ型について

   続いては、文字列を扱うデータ型です。数値のときと同じく、PostgreSQL、MySQLそれぞれがサポートしている代表的な文字データ型を次に示します。
PostgreSQL
char、varchar、text
MySQL
char、varchar、text、mediumtext、longtext

表4:PostgreSQLとMySQLの文字データ型

   文字データ型としてchar型はよく使用すると思います。MySQLについては、char型は最大255文字の制限が明確になっており、それ以上の文字列を扱う場合はtext型を使うことになります。一方、PostgreSQLにはあまり明確な制限はなく、1,000万文字ほどの文字列をchar型に格納することも可能です。

   PostgreSQL、MySQL共にサポートしているtext型ですが、SQLの標準ではありません。しかし、多くのRDBMSがサポートしているデータ型です。

   PostgreSQLのtext型に格納できる文字列の長さには制限がありませんが、MySQLのtext型およびlongtext型には制限があります。text型は65535文字、mediumtext型は16777215文字、longtext型4294967295文字です。


日付・時刻データ型について

   最後は日付・時刻データ型についてです。PostgreSQL、MySQLそれぞれがサポートしている代表的な日付・時刻データ型は次の通りです。

PostgreSQL
date、time、timestamp、interval
MySQL
date、time、timestamp、datetime、year

表5:PostgreSQLとMySQLの日付・時刻データ型

   よく見かけるテーブル設計として、そのテーブル内のレコード単位の更新日時を記録するためのカラムを用意することがあると思います。このカラムのデータ型としては、日付・時刻データ型の1つであるtimestamp型を用いることが多いでしょう。timestamp型はPostgreSQL、MySQL共にサポートしていますが、若干機能が異なりますので具体的に例をあげて説明します。

   図1の通りカラム「COL01」「COL02」「COL03」「COL04」を持つテーブル「TABLE01」を使用した例を考えてみます。

TABLE01のサンプル
図1:TABLE01のサンプル


   「COL01」「COL02」「COL03」のデータ型はchar(4)で「COL04」のデータ型はtimestamp型とします。この「TABLE01」テーブルに対してレコードを挿入し、その時の日付時刻を「COL04」に記録するためには、以下のようなINSERT文を使用します。

INSERT INTO TABLE01 (COL01,COL02,COL03) VALUES ('1000','2000','3000')

   これは、「COL04」に対して明示的な値を設定しないことによって、RDBMSに自動でその時の日付時刻を設定してもらう方法です。PostgreSQLとMySQL共にこの方法を実行できます。ただしPostgreSQLの場合は、「COL04」にデフォルト制約として、現在の日付時刻値を意味する「current_timestamp」を定義しておく必要があります。デフォルト制約とは、レコードの挿入時に値が指定されなかった場合に、自動でRDBMSが記録する値を定義できる機能で、PostgreSQLやMySQLだけでなく他のRDBMSでもこの機能は提供されています。

前のページ  1  2  3  次のページ


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第1回:同じようで違うデータ型
  連載で扱うバージョン
文字データ型について
  更新時における日付時刻の記録