mysqlについて、機能とかInnoDBとか文字コード等々

個人的にDBの中ではMySQLを使うことが多いです。しかしDB自体初めから組む機会は少ないので、良く調べてしまう事をメモします。

InnoDBとMyISAMはどっちを使う?

「とりあえずInnoDB」位の認識ですが、MySQL5.5からInnoDBがデフォルトになったみたいです。特別な理由がなければ、InnoDBで問題がないと思います

InnoDBを選び忘れて、MyISAMのままだったと言うことが無くなって、うれしいです。

InnoDBって?

・トランザクション処理ができる
・行ロック方式なのおすすめ(MyISAMはテーブルロック方式)
・チューニングは、innodb_buffer_pool_size, key_buffer_size
・バックアップしやすい

MySQL 5.6新機能

・マルチスレッド・スレーブ対応
・InnoDBで全文検索ができる
・InnoDBでNoSQLアクセスで、高速なキー・バリュー操作や、ビッグ・データ環境でのデータの高速取得が可能

その他詳細は MySQL Database 5.6の特長

文字コードは?

文字コードは「utf8mb4」
MySQLには、「utf8」と「utf8mb4」があります。MySQL 5.5.3以降ならば、utf8mb4を選択すればいいでしょう。

特徴
・utf8 → 4バイト文字列が入った場合文字化けする。
・utf8mb4 → UTF8で4バイト文字を扱える

接続照合順序

「general_ci」か、「unicode_ci」を選べばOKなようです。この2つは、文字列検索時に挙動が違います。それぞれの特徴です。

特徴
「general_ci」
・大文字小文字もマッチする。「A」で検索すると、「A,a」ともにマッチする。
・unicode_ciに比べて、文字検索が速い。

「unicode_ci」
・大文字小文字もマッチする。「A」で検索すると、「A,a」ともにマッチする。(general_ciと同じ)
・半角全角もマッチする。「A」で検索すると、「A,a,A,a」にマッチする。
・平仮名、カタカナ、濁音などもマッチする。「さ」で検索すると、「さ, ざ, サ, サ」などにもマッチする。
・general_ciに比べて、文字検索が遅い。

検索結果(select)で、無駄なマッチがない「general_ci」を選ぶ方が多いそうですが、「ドラえもん」を検索したとき、「どらえもん」 ,「ドラエモン」 ,「ドラエモン」 , 「どらエモン」にもヒットさせたいときは、「unicode_ci」を選ぶとOKです。
個人的には、「unicode_ci」をよく使います。

数値型属性のUNSIGNEDとZEROFILL

・UNSIGNED
 負の数は使えなくなるが、正の数は2倍の範囲まで使える。
 浮動小数点型(float, double)型は負の値が無くなるのみ

・ZEROFILL
 ZEROFILLを付けた場合、自動的にUNSIGNE属性になる。
 指定した桁数になるまで、0が埋まる
 例)int(4) UNSIGNED ZEROFILL で、数値12を入れると、0012になる。

データ型

データ型は様々あります。個人的に、おおむね選ぶときの基準です

数値 :int型
文字列:100文字以内なら、char(100)型、超えるなら、txet型
小数点:decimal(M,D) M:桁数,D:小数点
日時 :datetime (timestampは、2038-01-19 03:14:07秒まで)
データ型については、別記しています。

クエリの基本

SELECT * FROM table_name WHERE 条件;

DELETE FROM table_name WHERE 条件;

INSERT INTO table_name ( key1, key2, …) VALUES ( value1, value2, …);

UPDATE table_name SET key1 = value1 [, key2 = value2, …] WHERE 条件;

mysqlのcollateを使って大文字-小文字や全角-半角を無視した検索 – end0tknrのkipple – web写経開発

MySQL5.5、utf8mb4 の使用について – PHPプロ!Q&A掲示板

運用視点なMyISAMとInnoDBと。 | LexTech

MySQL :: MySQL Database 5.6