Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

第7回 MySQL事始 データ型

edited by DB Online   2011/09/22 00:00

2038年問題と2069年問題と2156年問題

DATE型とDATETIMEは最大9999年まで格納できるので、長期の未来日時を格納する場合はこのデータ型を使います。TIMESTAMP型とYEARには格納できる日付の範囲に制限があるため注意が必要です。

  • 2038年問題:MySQLのTIMESTAMP型では、1970年1月1日0時 (Unix epoch)からの経過時間を31ビットで表現しているため、2038年1月19日3時14分7秒以降の値を格納できない。
    参照: http://ja.wikipedia.org/wiki/2038年問題
  • 2069年問題:MySQLの関数などではYEARのデータを2桁または4桁で表現できるが、2桁で表現した場合、00-69の範囲の年の値は2000-2069に、70-99の範囲の年の値は1970-1999に変換される。
  • 2156年問題:4桁で年を表現しても、YEARで格納できる範囲は1901-2155のため、2156年以降の値を格納できない。

文字列型

文字列型の特徴は文字コードCHARACTER SETおよび文字の照合順序COLLATIONを利用できることにあります。MySQLで利用できる日本語関連の文字コードは第2回を、文字の照合順序は第3回を参照してください。

格納するデータ型には、固定長と可変長があります。ただし、実際どのように格納されるかはストレージエンジンに依存します。MyISAMの場合には格納するデータに応じて固定長と可変長を選択することで各テーブルの行フォーマットが固定長か可変長かが決まりますが、InnoDBの場合にはすべて可変長として、MEMORYの場合にはすべて固定長となります(MEMORYは各TEXT型利用不可)。

CHAR型とVARCHARの場合には最大の文字数を明示的に指定できます。また各データ型には格納可能なサイズにそれぞれ上限があります。ここでのサイズはバイト単位となっており、文字コードによって格納できる文字数に違いが出ます。最大65,536バイト格納可能なTEXTの場合、1文字あたり1バイトのasciiでは65,536文字、1文字あたり2バイトのcp932では32,767文字、1文字あたり4バイトのutf8mb4では16,384文字となります(ここで書いている1文字あたりのバイト数は最大のサイズのため、1バイト文字が含まれる場合などはより多い文字が格納可能となります)。CHAR型とTINYTEXT型は最大サイズが765バイトですが、格納可能な文字数はどの文字コードの場合でも255バイトです。

データ型 最大サイズ
CHAR 1,020Byte
VARCHAR 65,533Byte
TINYTEXT 1,020Byte
TEXT 64KB
MEDIUMTEXT 16MB
LONGTEXT 4GB

著者プロフィール

  • 梶山隆輔(カジヤマリュウスケ)

    日本オラクル株式会社 MySQL Global Business Unit Asia Pacific & Japan担当 MySQL Principal Sales Consultant オラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なMySQL部門にて、台湾、オーストラリア、インドに在籍するチームメンバーを束ね、アジア太平洋地域の25以上の国や地域でのMySQL普及やビジネスの拡大をミッションとする。  

バックナンバー

連載:MySQL事始

もっと読む

All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5