MySQLの始め方 Powered by Rabbit 2.1.2
MySQLの始め方
とみたまさひろ
NSEG #49 MySQL Talk in 長野
2014-03-15
MySQLの始め方 Powered by Rabbit 2.1.2
自己紹介
とみた まさひろ
プログラマー (Ruby & C)
http://tmtms.hatenablog.com
http://twitter.com/tmtms
htt...
MySQLの始め方 Powered by Rabbit 2.1.2
MySQL徹底入門(の一部)
MySQLの始め方 Powered by Rabbit 2.1.2
MySQL辞典(の一部)
MySQLの始め方 Powered by Rabbit 2.1.2
OSS貢献者賞
MySQLの始め方 Powered by Rabbit 2.1.2
MySQLとは
MySQLの始め方 Powered by Rabbit 2.1.2
「世界でもっとも普及している
オープンソースデータベース」
http://www-jp.mysql.com/ より
MySQLの始め方 Powered by Rabbit 2.1.2
オープンソース(GPL)なRDBMS
MySQLの始め方 Powered by Rabbit 2.1.2
商用版もあり
MySQL Enterprise Edition
by ORACLE
MySQLの始め方 Powered by Rabbit 2.1.2
バージョン
MySQLの始め方 Powered by Rabbit 2.1.2
バージョン
X.Y.Z
最新安定版は 5.6.16
X.Y がバージョン
Z はリリース毎に増加
X.Y.0 が正式リリースではない
MySQLの始め方 Powered by Rabbit 2.1.2
使ってみよう
MySQLの始め方 Powered by Rabbit 2.1.2
たいていの Linux には含まれてる
MySQLの始め方 Powered by Rabbit 2.1.2
でもちと古い
MySQLの始め方 Powered by Rabbit 2.1.2
今から始めるなら5.6.x
MySQLの始め方 Powered by Rabbit 2.1.2
公式バイナリがおすすめ
MySQLの始め方 Powered by Rabbit 2.1.2
Linux
Windows
OS X
Solaris
FreeBSD
MySQLの始め方 Powered by Rabbit 2.1.2
ダウンロード
http://dev.mysql.com/downloads/mysql/
MySQLの始め方 Powered by Rabbit 2.1.2
インストール
# cd /usr/local
# tar xf /tmp/mysql-5.6.16-linux-glibc2.5-i686.tar.gz
# mv mysql-...
MySQLの始め方 Powered by Rabbit 2.1.2
起動する前に
MySQLの始め方 Powered by Rabbit 2.1.2
設定ファイル
MySQLの始め方 Powered by Rabbit 2.1.2
my.cnf
この順番に読まれてマージ(重複は後勝ち)
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf (公...
MySQLの始め方 Powered by Rabbit 2.1.2
思わぬものを読んでることも!
MySQLの始め方 Powered by Rabbit 2.1.2
指定したものだけ読む
--defaults-file
コマンドライン引数の先頭に指定
途中に書いてもエラー
MySQLの始め方 Powered by Rabbit 2.1.2
一旦起動すると後で変更するのが
面倒なパラメータもあるので注意
MySQLの始め方 Powered by Rabbit 2.1.2
my.cnf
[mysqld]
user = mysql
character-set-server = utf8
log-error = /var/log/mysqld.err...
MySQLの始め方 Powered by Rabbit 2.1.2
起動
# /usr/local/mysql/bin/mysqld &
# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mys...
MySQLの始め方 Powered by Rabbit 2.1.2
停止
% /usr/local/mysql/bin/mysqladmin
-u root shutdown
# /usr/local/mysql/support-files/
...
MySQLの始め方 Powered by Rabbit 2.1.2
kill -9
ダメ!絶対!
MySQLの始め方 Powered by Rabbit 2.1.2
MySQLはネットワークサーバー
MySQLの始め方 Powered by Rabbit 2.1.2
サーバーとクライアント
サーバー
mysqld
クライアント
mysql
mysqladmin
mysqldump
その他各種アプリ
MySQLの始め方 Powered by Rabbit 2.1.2
待ち受けポート
TCP/IP 3306
UNIXソケット /tmp/mysql.sock
MySQLの始め方 Powered by Rabbit 2.1.2
アクセスするためには認証が必要
MySQLの始め方 Powered by Rabbit 2.1.2
ユーザー管理
MySQLの始め方 Powered by Rabbit 2.1.2
OSのユーザーとは(ほぼ)無関係
MySQLの始め方 Powered by Rabbit 2.1.2
username@client
MySQLの始め方 Powered by Rabbit 2.1.2
初期状態で
root@localhost
root@127.0.0.1
root@::1
root@ホスト名
MySQLの始め方 Powered by Rabbit 2.1.2
全部パスワードなし
MySQLの始め方 Powered by Rabbit 2.1.2
パスワード設定
% mysql -u root
[自分自身のパスワード]
mysql> set password = password('hogehoge');
[他のユーザー...
MySQLの始め方 Powered by Rabbit 2.1.2
パスワード設定後
% mysql -u root
% ERROR 1045 (28000): Access denied for user
'root'@'localhost'...
MySQLの始め方 Powered by Rabbit 2.1.2
匿名ユーザー
ユーザー登録してなくてもアクセス可能
% mysql -u tommy
mysql> show databases;
+--------------------+...
MySQLの始め方 Powered by Rabbit 2.1.2
ユーザー一覧
% mysql -u root
mysql> select user,host from mysql.user;
+------+-----------+
| u...
MySQLの始め方 Powered by Rabbit 2.1.2
mysql_secure_installation
root のパスワード設定
匿名ユーザーの削除
リモートからの root アクセス拒否
test データベース削除
MySQLの始め方 Powered by Rabbit 2.1.2
mysql_secure_installation
% mysql_secure_installation
...
% mysql -u root
mysql> select ...
MySQLの始め方 Powered by Rabbit 2.1.2
不要ユーザーの削除
% mysql -u root
mysql> drop user root@'127.0.0.1';
mysql> drop user root@'::1'...
MySQLの始め方 Powered by Rabbit 2.1.2
ユーザー作成
% mysql -u root -p
mysql> create user hoge@localhost
identified by 'パスワード';
MySQLの始め方 Powered by Rabbit 2.1.2
権限付与
mysql> grant 権限 on DB名.TBL名
to user@client;
MySQLの始め方 Powered by Rabbit 2.1.2
権限
All | Alter | Alter routine | Create | Create
routine | Create tablespace | Create
te...
MySQLの始め方 Powered by Rabbit 2.1.2
権限
システム全体
データベース
テーブル
カラム
MySQLの始め方 Powered by Rabbit 2.1.2
たいていはこれで事足りるかも
特定のDBに対して全権付与
mysql> grant all on DB名.*
to user@client;
MySQLの始め方 Powered by Rabbit 2.1.2
権限剥奪
mysql> revoke 権限 on DB名.TBL名
from user@client;
MySQLの始め方 Powered by Rabbit 2.1.2
localhost と 127.0.0.1 は違う!
MySQLの始め方 Powered by Rabbit 2.1.2
localhost と 127.0.0.1
初心者はだいたいハマる
localhost は UNIXソケット
/tmp/mysql.sock
mysql -u root -h ...
MySQLの始め方 Powered by Rabbit 2.1.2
日本語
MySQLの始め方 Powered by Rabbit 2.1.2
文字コード
MySQLの始め方 Powered by Rabbit 2.1.2
初心者は黙ってutf8
(utf8mb4でも可)
MySQLの始め方 Powered by Rabbit 2.1.2
my.cnf
[mysqld]
user = mysql
character-set-server = utf8
log-error = /var/log/mysqld.err...
MySQLの始め方 Powered by Rabbit 2.1.2
charset と collation
MySQLの始め方 Powered by Rabbit 2.1.2
charset
コードと文字との対応 (「あ」= E3 81 82)
utf8mb4 : 4バイトUTF-8(MySQL 5.5から)
utf8 : 3バイトUTF-8
euc...
MySQLの始め方 Powered by Rabbit 2.1.2
charset
mysql> show charset;
+----------+-----------------------------+-----------------...
MySQLの始め方 Powered by Rabbit 2.1.2
collation
文字の照合規則
utf8_general_ci, utf8_bin,
utf8_unicode_ci, ...
MySQLの始め方 Powered by Rabbit 2.1.2
collation
mysql> show collation;
+--------------------------+----------+-----+---------+...
MySQLの始め方 Powered by Rabbit 2.1.2
utf8_general_ci
charset utf8 のデフォルトの collation
ASCII/ラテン文字の大文字小文字を区別し
ない
A = a
MySQLの始め方 Powered by Rabbit 2.1.2
utf8_bin
char(n) binary として宣言した時の
collation
すべての文字を区別する
A != a
MySQLの始め方 Powered by Rabbit 2.1.2
utf8_unicode_ci
Unicode Collation Algorithm (UCA) による
collation
大文字/小文字/全角/半角/カタカナ/ひらが
な...
MySQLの始め方 Powered by Rabbit 2.1.2
文字コードが関係するもの
クライアント
接続
データベース
テーブル
カラム
MySQLの始め方 Powered by Rabbit 2.1.2
同じテーブルのカラム毎に異なる
文字コードを指定可能
MySQLの始め方 Powered by Rabbit 2.1.2
クライアント-サーバー間で
自動変換
MySQLの始め方 Powered by Rabbit 2.1.2
ハマりたくなかったらutf8に統一
(utf8mb4でも可)
MySQLの始め方 Powered by Rabbit 2.1.2
ストレージエンジン
MySQLの始め方 Powered by Rabbit 2.1.2
データをディスク(か何か)に保存&取
り出すレイヤ
MySQLの始め方 Powered by Rabbit 2.1.2
SQLのことなんて(あんまり)知らない
MySQLの始め方 Powered by Rabbit 2.1.2
InnoDB / MyISAM / CSV /
BLACKHOLE / MEMORY /
MRG_MYISAM / ARCHIVE
MySQLの始め方 Powered by Rabbit 2.1.2
InnoDB / MyISAM / CSV /
BLACKHOLE / MEMORY /
MRG_MYISAM / ARCHIVE
MySQLの始め方 Powered by Rabbit 2.1.2
異なるストレージエンジン間で
JOIN / Sub SELECT も可
MySQLの始め方 Powered by Rabbit 2.1.2
MyISAM
以前のデフォルトのストレージエンジン
システムテーブル(mysql.*)で使用
トランザクション、外部キー未対応
テーブルロック
全文検索(日本語不可)
位置情報
MySQLの始め方 Powered by Rabbit 2.1.2
InnoDB
デフォルトのストレージエンジン
トランザクション
レコードロック
全文検索(日本語不可) (5.6 から)
位置情報 (5.0 から)
MySQLの始め方 Powered by Rabbit 2.1.2
初心者は黙ってInnoDB
MySQLの始め方 Powered by Rabbit 2.1.2
mroonga
コミュニティ版ストレージエンジン
高速日本語全文検索 groonga
位置情報
mroonga = groonga ストレージエンジン
毎月肉の日(29日)リリ...
MySQLの始め方 Powered by Rabbit 2.1.2
sql_mode
MySQLの始め方 Powered by Rabbit 2.1.2
MySQL特有の変な挙動を変更
MySQLの始め方 Powered by Rabbit 2.1.2
MySQL特有の挙動
カラム長を超えてもエラーにならない
不正な文字があってもエラーにならない
指定されたストレージエンジンがないと代替
を使う
日付 0000-00-00, ...
MySQLの始め方 Powered by Rabbit 2.1.2
MySQL特有の挙動
GROUP BY に指定されてないカラムを
SELECT, HAVING できる
"〜" が文字列リテラル
|| が論理和
等々
MySQLの始め方 Powered by Rabbit 2.1.2
sql_mode
グローバル: my.cnf で指定
グローバル: set global sql_mode = XXXX;
セッション: set sql_mode = XXXX...
MySQLの始め方 Powered by Rabbit 2.1.2
まとめ
設定ファイルに注意
初期状態のアクセス権は危険
文字コードは utf8 or utf8mb4
ストレージエンジンは InnoDB
MySQL特有の挙動に気をつける
Upcoming SlideShare
Loading in …5
×

Nseg49 mysql

1,983 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,983
On SlideShare
0
From Embeds
0
Number of Embeds
126
Actions
Shares
0
Downloads
15
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Nseg49 mysql

  1. 1. MySQLの始め方 Powered by Rabbit 2.1.2 MySQLの始め方 とみたまさひろ NSEG #49 MySQL Talk in 長野 2014-03-15
  2. 2. MySQLの始め方 Powered by Rabbit 2.1.2 自己紹介 とみた まさひろ プログラマー (Ruby & C) http://tmtms.hatenablog.com http://twitter.com/tmtms https://github.com/tmtm 日本MySQLユーザ会代表
  3. 3. MySQLの始め方 Powered by Rabbit 2.1.2 MySQL徹底入門(の一部)
  4. 4. MySQLの始め方 Powered by Rabbit 2.1.2 MySQL辞典(の一部)
  5. 5. MySQLの始め方 Powered by Rabbit 2.1.2 OSS貢献者賞
  6. 6. MySQLの始め方 Powered by Rabbit 2.1.2 MySQLとは
  7. 7. MySQLの始め方 Powered by Rabbit 2.1.2 「世界でもっとも普及している オープンソースデータベース」 http://www-jp.mysql.com/ より
  8. 8. MySQLの始め方 Powered by Rabbit 2.1.2 オープンソース(GPL)なRDBMS
  9. 9. MySQLの始め方 Powered by Rabbit 2.1.2 商用版もあり MySQL Enterprise Edition by ORACLE
  10. 10. MySQLの始め方 Powered by Rabbit 2.1.2 バージョン
  11. 11. MySQLの始め方 Powered by Rabbit 2.1.2 バージョン X.Y.Z 最新安定版は 5.6.16 X.Y がバージョン Z はリリース毎に増加 X.Y.0 が正式リリースではない
  12. 12. MySQLの始め方 Powered by Rabbit 2.1.2 使ってみよう
  13. 13. MySQLの始め方 Powered by Rabbit 2.1.2 たいていの Linux には含まれてる
  14. 14. MySQLの始め方 Powered by Rabbit 2.1.2 でもちと古い
  15. 15. MySQLの始め方 Powered by Rabbit 2.1.2 今から始めるなら5.6.x
  16. 16. MySQLの始め方 Powered by Rabbit 2.1.2 公式バイナリがおすすめ
  17. 17. MySQLの始め方 Powered by Rabbit 2.1.2 Linux Windows OS X Solaris FreeBSD
  18. 18. MySQLの始め方 Powered by Rabbit 2.1.2 ダウンロード http://dev.mysql.com/downloads/mysql/
  19. 19. MySQLの始め方 Powered by Rabbit 2.1.2 インストール # cd /usr/local # tar xf /tmp/mysql-5.6.16-linux-glibc2.5-i686.tar.gz # mv mysql-5.6.16-linux-glibc2.5-i686 mysql # cd mysql # ./scripts/mysql_install_db # useradd -r mysql # chown -R mysql:mysql .
  20. 20. MySQLの始め方 Powered by Rabbit 2.1.2 起動する前に
  21. 21. MySQLの始め方 Powered by Rabbit 2.1.2 設定ファイル
  22. 22. MySQLの始め方 Powered by Rabbit 2.1.2 my.cnf この順番に読まれてマージ(重複は後勝ち) /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf (公式バイナリ) $MYSQL_HOME/my.cnf --defaults-extra-file で指定したもの $HOME/.my.cnf
  23. 23. MySQLの始め方 Powered by Rabbit 2.1.2 思わぬものを読んでることも!
  24. 24. MySQLの始め方 Powered by Rabbit 2.1.2 指定したものだけ読む --defaults-file コマンドライン引数の先頭に指定 途中に書いてもエラー
  25. 25. MySQLの始め方 Powered by Rabbit 2.1.2 一旦起動すると後で変更するのが 面倒なパラメータもあるので注意
  26. 26. MySQLの始め方 Powered by Rabbit 2.1.2 my.cnf [mysqld] user = mysql character-set-server = utf8 log-error = /var/log/mysqld.err skip-name-resolve innodb-file-per-table sql-mode = TRADITIONAL [mysql] default-character-set = utf8 show-warnings
  27. 27. MySQLの始め方 Powered by Rabbit 2.1.2 起動 # /usr/local/mysql/bin/mysqld & # /usr/local/mysql/bin/mysqld_safe & # /usr/local/mysql/support-files/ mysql.server start
  28. 28. MySQLの始め方 Powered by Rabbit 2.1.2 停止 % /usr/local/mysql/bin/mysqladmin -u root shutdown # /usr/local/mysql/support-files/ mysql.server stop # kill <PID of mysqld>
  29. 29. MySQLの始め方 Powered by Rabbit 2.1.2 kill -9 ダメ!絶対!
  30. 30. MySQLの始め方 Powered by Rabbit 2.1.2 MySQLはネットワークサーバー
  31. 31. MySQLの始め方 Powered by Rabbit 2.1.2 サーバーとクライアント サーバー mysqld クライアント mysql mysqladmin mysqldump その他各種アプリ
  32. 32. MySQLの始め方 Powered by Rabbit 2.1.2 待ち受けポート TCP/IP 3306 UNIXソケット /tmp/mysql.sock
  33. 33. MySQLの始め方 Powered by Rabbit 2.1.2 アクセスするためには認証が必要
  34. 34. MySQLの始め方 Powered by Rabbit 2.1.2 ユーザー管理
  35. 35. MySQLの始め方 Powered by Rabbit 2.1.2 OSのユーザーとは(ほぼ)無関係
  36. 36. MySQLの始め方 Powered by Rabbit 2.1.2 username@client
  37. 37. MySQLの始め方 Powered by Rabbit 2.1.2 初期状態で root@localhost root@127.0.0.1 root@::1 root@ホスト名
  38. 38. MySQLの始め方 Powered by Rabbit 2.1.2 全部パスワードなし
  39. 39. MySQLの始め方 Powered by Rabbit 2.1.2 パスワード設定 % mysql -u root [自分自身のパスワード] mysql> set password = password('hogehoge'); [他のユーザーのパスワード] mysql> set password for root@'127.0.0.1' = password('fugafuga'); mysql> Ctrl-D
  40. 40. MySQLの始め方 Powered by Rabbit 2.1.2 パスワード設定後 % mysql -u root % ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) % mysql -u root -p Enter password: mysql> % mysql -u root -phogehoge (-pの後に空白不要) mysql>
  41. 41. MySQLの始め方 Powered by Rabbit 2.1.2 匿名ユーザー ユーザー登録してなくてもアクセス可能 % mysql -u tommy mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+
  42. 42. MySQLの始め方 Powered by Rabbit 2.1.2 ユーザー一覧 % mysql -u root mysql> select user,host from mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | | x220 | | root | x220 | +------+-----------+
  43. 43. MySQLの始め方 Powered by Rabbit 2.1.2 mysql_secure_installation root のパスワード設定 匿名ユーザーの削除 リモートからの root アクセス拒否 test データベース削除
  44. 44. MySQLの始め方 Powered by Rabbit 2.1.2 mysql_secure_installation % mysql_secure_installation ... % mysql -u root mysql> select user,host from mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+
  45. 45. MySQLの始め方 Powered by Rabbit 2.1.2 不要ユーザーの削除 % mysql -u root mysql> drop user root@'127.0.0.1'; mysql> drop user root@'::1'; mysql> drop user root@ホスト名; mysql> drop user ''@localhost; mysql> drop user ''@ホスト名;
  46. 46. MySQLの始め方 Powered by Rabbit 2.1.2 ユーザー作成 % mysql -u root -p mysql> create user hoge@localhost identified by 'パスワード';
  47. 47. MySQLの始め方 Powered by Rabbit 2.1.2 権限付与 mysql> grant 権限 on DB名.TBL名 to user@client;
  48. 48. MySQLの始め方 Powered by Rabbit 2.1.2 権限 All | Alter | Alter routine | Create | Create routine | Create tablespace | Create temporary tables | Create user | Create view | Delete | Drop | Event | Execute | File | Grant option | Index | Insert | Lock tables | Process | Proxy | References | Reload | Replication client | Replication slave | Select | Show databases | Show view | Shutdown | Super | Trigger | Update | Usage
  49. 49. MySQLの始め方 Powered by Rabbit 2.1.2 権限 システム全体 データベース テーブル カラム
  50. 50. MySQLの始め方 Powered by Rabbit 2.1.2 たいていはこれで事足りるかも 特定のDBに対して全権付与 mysql> grant all on DB名.* to user@client;
  51. 51. MySQLの始め方 Powered by Rabbit 2.1.2 権限剥奪 mysql> revoke 権限 on DB名.TBL名 from user@client;
  52. 52. MySQLの始め方 Powered by Rabbit 2.1.2 localhost と 127.0.0.1 は違う!
  53. 53. MySQLの始め方 Powered by Rabbit 2.1.2 localhost と 127.0.0.1 初心者はだいたいハマる localhost は UNIXソケット /tmp/mysql.sock mysql -u root -h localhost 127.0.0.1 は TCP/IP mysql -u root -h 127.0.0.1
  54. 54. MySQLの始め方 Powered by Rabbit 2.1.2 日本語
  55. 55. MySQLの始め方 Powered by Rabbit 2.1.2 文字コード
  56. 56. MySQLの始め方 Powered by Rabbit 2.1.2 初心者は黙ってutf8 (utf8mb4でも可)
  57. 57. MySQLの始め方 Powered by Rabbit 2.1.2 my.cnf [mysqld] user = mysql character-set-server = utf8 log-error = /var/log/mysqld.err skip-name-resolve innodb-file-per-table sql-mode = TRADITIONAL [mysql] default-character-set = utf8 show-warnings
  58. 58. MySQLの始め方 Powered by Rabbit 2.1.2 charset と collation
  59. 59. MySQLの始め方 Powered by Rabbit 2.1.2 charset コードと文字との対応 (「あ」= E3 81 82) utf8mb4 : 4バイトUTF-8(MySQL 5.5から) utf8 : 3バイトUTF-8 eucjpms, cp932, ...
  60. 60. MySQLの始め方 Powered by Rabbit 2.1.2 charset mysql> show charset; +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | 〜 | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | 〜
  61. 61. MySQLの始め方 Powered by Rabbit 2.1.2 collation 文字の照合規則 utf8_general_ci, utf8_bin, utf8_unicode_ci, ...
  62. 62. MySQLの始め方 Powered by Rabbit 2.1.2 collation mysql> show collation; +--------------------------+----------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+----------+-----+---------+----------+---------+ | big5_chinese_ci | big5 | 1 | Yes | Yes | 1 | | big5_bin | big5 | 84 | | Yes | 1 | | dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 | | dec8_bin | dec8 | 69 | | Yes | 1 | | cp850_general_ci | cp850 | 4 | Yes | Yes | 1 | | cp850_bin | cp850 | 80 | | Yes | 1 | | hp8_english_ci | hp8 | 6 | Yes | Yes | 1 | | hp8_bin | hp8 | 72 | | Yes | 1 | | koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 | | koi8r_bin | koi8r | 74 | | Yes | 1 | | latin1_german1_ci | latin1 | 5 | | Yes | 1 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 | 〜 | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin | utf8 | 83 | | Yes | 1 | | utf8_unicode_ci | utf8 | 192 | | Yes | 8 | | utf8_icelandic_ci | utf8 | 193 | | Yes | 8 | | utf8_latvian_ci | utf8 | 194 | | Yes | 8 | | utf8_romanian_ci | utf8 | 195 | | Yes | 8 | 〜
  63. 63. MySQLの始め方 Powered by Rabbit 2.1.2 utf8_general_ci charset utf8 のデフォルトの collation ASCII/ラテン文字の大文字小文字を区別し ない A = a
  64. 64. MySQLの始め方 Powered by Rabbit 2.1.2 utf8_bin char(n) binary として宣言した時の collation すべての文字を区別する A != a
  65. 65. MySQLの始め方 Powered by Rabbit 2.1.2 utf8_unicode_ci Unicode Collation Algorithm (UCA) による collation 大文字/小文字/全角/半角/カタカナ/ひらが な/濁音を区別しない a=A=A(全角) は=ば=ぱ=ハ=バ=パ=ハ http://tmtm.org/tmp/mysql_unicode_collation.html
  66. 66. MySQLの始め方 Powered by Rabbit 2.1.2 文字コードが関係するもの クライアント 接続 データベース テーブル カラム
  67. 67. MySQLの始め方 Powered by Rabbit 2.1.2 同じテーブルのカラム毎に異なる 文字コードを指定可能
  68. 68. MySQLの始め方 Powered by Rabbit 2.1.2 クライアント-サーバー間で 自動変換
  69. 69. MySQLの始め方 Powered by Rabbit 2.1.2 ハマりたくなかったらutf8に統一 (utf8mb4でも可)
  70. 70. MySQLの始め方 Powered by Rabbit 2.1.2 ストレージエンジン
  71. 71. MySQLの始め方 Powered by Rabbit 2.1.2 データをディスク(か何か)に保存&取 り出すレイヤ
  72. 72. MySQLの始め方 Powered by Rabbit 2.1.2 SQLのことなんて(あんまり)知らない
  73. 73. MySQLの始め方 Powered by Rabbit 2.1.2 InnoDB / MyISAM / CSV / BLACKHOLE / MEMORY / MRG_MYISAM / ARCHIVE
  74. 74. MySQLの始め方 Powered by Rabbit 2.1.2 InnoDB / MyISAM / CSV / BLACKHOLE / MEMORY / MRG_MYISAM / ARCHIVE
  75. 75. MySQLの始め方 Powered by Rabbit 2.1.2 異なるストレージエンジン間で JOIN / Sub SELECT も可
  76. 76. MySQLの始め方 Powered by Rabbit 2.1.2 MyISAM 以前のデフォルトのストレージエンジン システムテーブル(mysql.*)で使用 トランザクション、外部キー未対応 テーブルロック 全文検索(日本語不可) 位置情報
  77. 77. MySQLの始め方 Powered by Rabbit 2.1.2 InnoDB デフォルトのストレージエンジン トランザクション レコードロック 全文検索(日本語不可) (5.6 から) 位置情報 (5.0 から)
  78. 78. MySQLの始め方 Powered by Rabbit 2.1.2 初心者は黙ってInnoDB
  79. 79. MySQLの始め方 Powered by Rabbit 2.1.2 mroonga コミュニティ版ストレージエンジン 高速日本語全文検索 groonga 位置情報 mroonga = groonga ストレージエンジン 毎月肉の日(29日)リリース
  80. 80. MySQLの始め方 Powered by Rabbit 2.1.2 sql_mode
  81. 81. MySQLの始め方 Powered by Rabbit 2.1.2 MySQL特有の変な挙動を変更
  82. 82. MySQLの始め方 Powered by Rabbit 2.1.2 MySQL特有の挙動 カラム長を超えてもエラーにならない 不正な文字があってもエラーにならない 指定されたストレージエンジンがないと代替 を使う 日付 0000-00-00, 2014-00-01, 2014-04-31
  83. 83. MySQLの始め方 Powered by Rabbit 2.1.2 MySQL特有の挙動 GROUP BY に指定されてないカラムを SELECT, HAVING できる "〜" が文字列リテラル || が論理和 等々
  84. 84. MySQLの始め方 Powered by Rabbit 2.1.2 sql_mode グローバル: my.cnf で指定 グローバル: set global sql_mode = XXXX; セッション: set sql_mode = XXXX; http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html
  85. 85. MySQLの始め方 Powered by Rabbit 2.1.2 まとめ 設定ファイルに注意 初期状態のアクセス権は危険 文字コードは utf8 or utf8mb4 ストレージエンジンは InnoDB MySQL特有の挙動に気をつける

×