データ型.Type

データ型はおおまかに分類すると次の6種類
(.) 数値 (.) 文字列 (.) 日付/時刻 (.) BLOB (.) 列挙
POINT QueryBrowser で文字をうつと, 補間される( STRING といれようとすると, そんな型はないので補間されない )


BOOL

DESC 条件が真であるかどうかを表す値のこと 2 つある
// 大文字, 個別の区別はなし // (.) TRUE : 1 (.) FALSE : 0



DATETIME.DATE

DESC 日付, 時刻を保存しておく型
DATETIME 日付と時刻 DATE 日付 TIME 時刻 TIMESTAMP タイムスタンプ YEAR 年
値を指定する時の文字列の書式は以下のような指定ができる もし書式が不正と判断すると0値が設定される
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')
WARNING ["] いります


整数

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 にもある。
// 001 となる TINYINT money



表示幅

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 大量の文字列を保存したいときに利用
WARNING
// 2 べきの値はだめです -- BAD CHAR(256) -- OK CHAR(255)



CHAR(文字数)

DESC 指定文字数(バイト数)分の文字列が保存できる「固定長」のデータ型 固定長 とは文字列を保存するときに必ず確保した文字数(バイト数)を消費する
// 10 byte 分の箱を用意 char(10) insert into tbl moji // 空白 で padding される // とりだすときは, space が削除される -------------------- abcde[ ][ ][ ][ ][ ] --------------------
CHAR(10) [xxxxxxxxx___] CHAR(7) は超えることができない CHAR 型のカラムでは、 CHAR(4) 型と VARCHAR(4) 型から取り出した値はそれぞれの場合で変わりません まとめるとコレ
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
WARNING
// 最大文字数をこえるとエラー // 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] -------------
WARNING 文字数 というのは半角文字で書かれた場合の文字数ということ 日本語は2バイト文字を保存するとき半分の5文字になる。 想定文字数の 2 倍程度にする。


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 にするとよいかも こんなおせっかいがある
// (.) char(4)のフィールドに'12345'の文字列をinsertすると'1234'とセットされます (.) 制約に外れると勝手にデフォルト値を入れられるわけね // 自分の環境では きちんとはじいてくれる // Data too long for column 'str' at row 1
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")
-> ちなみに table 一覧を見ると, ["] はつかない. -> これは 文字列ですよ ! という意味 // [ Default Value ] が空のときは 怒られる insert into foo (test) values(0) Field 'str' doesn't have a default value


DefaultValue

DESC デフォルト値を指定する insert でカラムの指定がないときは, この値がセットされる。 QueryBrowser ではカラム型によって次のように入力する
// BAD 文字列型 abc // 文字列はクォートすること 文字列型 "abc" 文字列型 'abc' // 数値型はそのまま入力 数値型 1 // NULL を指定するとカラムの値の指定がなければ NULL がセットされる。 // ただし オプションとして NotNULL をオフにする必要がある。
WARNING NotNULL を指定すると インサート時のカラムの指定がなければDefault値が設定される。 そのとき値の指定がなければエラーになる。 TEXT, BLOB はデフォルト値をもつことができない為 NotNULL オフではエラーになる。 NotNULL オンではNULLが設定される。 Field 'xxx' doesn't have a default value
// 空文字が default // char(10) のときは, "def" と入力しないと ERROR になる
insert 時に 指定しなくてもよい方法は 2 つある
(.) Not NULL をはずす -> NULL がはいる ( だって NULL がはいってもいいっていっるから ) (.) Default 値をいれる -> Default の値がはいる
TIP Column を追加するときに, Default なし && NotNULL にすると その型の Default がはいるらしいです
// Int なら 0 がはいる int -> [0]
TIP // null の扱いはおいておき, Defalut Value を空にすると, // == Default 値は ないとみなされて, 怒られる // ちなみに , field をつくった直後は NOT NULL が ON になるらしい -> ie. 空はなしよ ! ということになる. -> 慣れないうちはこれが望ましい // Default Value [null] とあったら 文字とおり, 空 == 指定がないということ