データ型はおおまかに分類すると次の6種類
  POINT
    QueryBrowser で文字をうつと, 補間される( STRING といれようとすると, そんな型はないので補間されない )
■ BOOL
  DESC
    条件が真であるかどうかを表す値のこと
    2 つある
■ DATETIME.DATE
  DESC
    日付, 時刻を保存しておく型
  
  DATETIME   日付と時刻        
  DATE       日付
  TIME       時刻
  TIMESTAMP  タイムスタンプ
  YEAR       年
    YYYY-MM-DD HH:MM:SS
    YYYY.MM.DD HH.MM.SS
    YYYY/MM/DD HH/MM/SS
    YYYYMMDDHHMMSS
  // 形式 'YYYY-MM-DD HH:MM:SS'
  insert into tbl (birthday) values('2010.05.28 10:22:22')
  // 時間を省略
  //    RET: "2010-05-05 00:00:00"
  insert into tbl (birthday) values('2010.05.05')
  -- 誕生日が 2010年5月30日 より後を指定
  select * from tbl where birthday > "2000-05-30";
  WARNING
    
  -- Strict Mode では 不正な日付はエラー
  insert into tbl (d) values('2010.04.31')
■ 整数
  DESC
    次の 5 つがある
    各格納できる値の範囲が決まっていて
    範囲を超えるとエラーになる
   TINYINT
     -128:127 (unsigned 0:255 )
   SMALLINT
     -32768:32767 (unsigned 0:65535)
   MEDIUMINT
     -8388608:8388607 (unsigned 0:16777215 )
   INT(INTEGER)
     -2147483648:2147483647 (unsigned 0:4294967295)
   BIGINT
     -9223372036854775808から9223372036854775807
     (unsigned 0:18446744073709551615)
■ ZEROFILL
  DESC
    SQL Browser にもある。
■ 表示幅
  SYNTAX
    typename( N )
  DESC
    各データ型は表示幅を設定できます
    Nには幅を表す数値
    幅を指定すると指定した幅で数値が表示されます
    本来使用可能な桁数よりも小さい表示幅を指定すると
    表示幅よりも大きい値を指定すると設定は無視される
  
    SMALLINT(3) 
■ UNSIGNED
  DESC
    数値型に 符号なし OPTION を追加する
  WARNING 
    // すでに マイナスがはいってる column に UNSIGNED 
    // を追加すると怒られる
    // 
    Out of range value for column 'nr' at row 1
■ 文字列型(string)
  DESC
    文字列を格納します
    型によって最大 Byte 数がきまっています
  
  WARNING
    () 内の数値は 半角のときの 最大文字数( 2 Byte 文字は半分にへる )
  まとめると 3 つ
  // 型名     最大 Byte  
  CHAR       255         固定長 半角英数字は255文字まで、2バイト文字は約127文字まで
  VARCHAR     255        可変長 半角英数字は255文字まで、2バイト文字は約127文字まで
  TEXT     65535         大量の文字列を保存したいときに利用
    // 2 べきの値はだめです
      -- BAD
      CHAR(256)
      -- OK
      CHAR(255)
■ CHAR(文字数)
  DESC
    指定文字数(バイト数)分の文字列が保存できる「固定長」のデータ型
    固定長 とは文字列を保存するときに必ず確保した文字数(バイト数)を消費する
    // 10 byte 分の箱を用意
    char(10)   
    insert into tbl moji 
    // 空白 で padding される
    // とりだすときは, space が削除される
    --------------------
    abcde[ ][ ][ ][ ][ ]
    --------------------
    
  CHAR , VCHAR の比較  ( 単位 : byte )
  値        CHAR(4) WORKSIZE VARCHAR(4)  WORKSIZE 
  ''         '    ' 4        ''           1  
  'ab'      'ab  '  4         'ab'        3 
  'abcd'    'abcd'  4         'abcd'       5
  'abcdefgh' 'abcd'  4         'abcd'       5
    // 最大文字数をこえるとエラー
    // ERROR 1406 (22001) at line 5: Data too long for column 'str' at row 1
    insert into test.testtbl (str) values("testdayo");
■ VARCHAR(最大文字数)
  DESC
    上限つきの Variable (可変サイズ)のCHAR型
    保存された文字数分の領域しか消費しません
    可変 Work だから遅い
    
    最大文字に満たないときは 文字数 + 1 byte 分を消費する
    
  VARCHAR(10)   // 最大10文字の可変長文字列
  // 4 byte 消費
  --------
  [abc][N]
  --------
  // 8 byte 消費
  -------------
  [abcdefgh][N]
  -------------
■ TEXT
  DESC
    65535 バイトの文字列が保存可能なデータ型
    保存される文字列数が特定できないカラムに対して利用する。
  WARNING
    デフォルト値は指定できない。
    ( BLOB/TEXT column cant have a default value )
    改行Code は [\r\n] かも?
    可変長文字列
    TINYTEXT       :  2^ 8-1 バイト
    TINYTEXT       :  2^16-1 バイト
    MEDIUMINTTEXT  :  2^24-1 バイト
    LONGTEXT       :  2^32-1 バイト
    
  // SQL 文では CHAR と同じようにすればいいだけ
  insert into foo (txt) values("aaa")
■ BLOB(BinaryLargeObject)
  DESC
    データをバイトコードとして格納する。
    違いはソートと比較時に大文字と小文字を区別するかしないか
    (BLOBはする, TEXTはしない)
■ Enum(列挙型)
  DESC
    あらかじめ決めた値のリストを定義する型
    設定できる数は 2^16 個
    設定される値があらかじめ決まっているならば利用すると便利。
    ( 性別カラムの男 | 女 )
    Enum 型の値は 1 から始まり
    0 は空文字列が返る。
    -- 条件の指定では文字列ではなく数値でする
    select name from member where sex = 1;
■ set
  DESC
    Enum型同様にあらかじめ値のセットを決めておくが
    セットの中から自由に組み合わせることができる。
    C でのビットフラグのような扱い。
    最大で64個の要素を持てる。
    -- 条件指定には & をつかう
    select  name  from  member  where family & 4;
■ Set
■ Column.属性
  DESC
    各 column には 属性を指定できます
  TIP
    いろんな "おせっかい" があるので STRICT mode にするとよいかも
  こんなおせっかいがある
    
  my.cnf に STRICTモードにできます 以下のようにsql-modeを追記
  [mysqld]
  sql-mode="STRICT_ALL_TABLES"
■ NotNULL
  DESC
    この Colunn は not null == [ NULL はなしよ ] という意味
  // もし指定しないと, 次のようにいわれる ( "test" Column は null になりえない )
  //    Column 'test' cannot be null
  insert into tbl (test, str) values( null, null )
  TIP
    すでに null がある column を NotNULL に変更するとERROR がでます
  // 次はいれることができる -> 0 が "0" と解釈してくれる
  insert into foo (test, str) values(0, 0)
  BAD
    insert into tbl (test, str) values(0, 0aaa)
  OK
    insert into tbl (test, str) values(0, "0aaa")
■ DefaultValue
  DESC
    デフォルト値を指定する
    insert でカラムの指定がないときは, この値がセットされる。
    QueryBrowser ではカラム型によって次のように入力する
    // BAD
    文字列型    abc
    // 文字列はクォートすること
    文字列型    "abc"
    文字列型    'abc'
    // 数値型はそのまま入力
    数値型      1
    // NULL を指定するとカラムの値の指定がなければ NULL がセットされる。
    // ただし オプションとして NotNULL をオフにする必要がある。
  // 空文字が default
  // char(10) のときは, "def" と入力しないと ERROR になる
  // Int なら 0 がはいる
  int -> [0]