mysql casual fukuoka vol.4 20141021
DESCRIPTION
MySQL Casual Talks in Fukuoka vol.4 ONLY_FULL_GROUP_BYについて 関連ブログエントリ http://matsumana.info/blog/2014/10/22/mysql-casual-fukuoka-vol4/TRANSCRIPT
ONLY_FULL_GROUP_BYについて
MySQL Casual Talks in Fukuoka vol.4 2014/10/21
自己紹介
名前: 松崎 学
所属: 株式会社キャム http://www.cam-net.co.jp/ (SaaSでERPサービスを提供中)
Twitter: matsumana
職業:ソフトウェアエンジニア (プログラマ、ITインフラ全般)
MySQL 5.7.5のリリースノートを見て
気になった箇所について 調べてみました
Changes in MySQL 5.7.5 (2014-09-25, Milestone 15) http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html
MySQL 5.7 Reference Manualを確認してみるhttp://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting
MySQL 5.6 Reference Manualを確認してみるhttp://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-setting
ONLY_FULL_GROUP_BYといえば !
SQLアンチパターンの アンビギュアスグループ (曖昧なグループ)
MySQLやSQLiteでは、 こういうテーブルに対して
こういうSQLがエラーにならずに 結果を返すアレです
※sql_modeにONLY_FULL_GROUP_BYをセットすれば このようなSQLをエラーにする事ができます
実際に確認してみます
CentOS 6.5 x86_64 MySQL公式yumリポジトリを使用
!
MySQL 5.6.21 MySQL 5.7.5
デフォルトのmy.cnfには 以下の値が設定されていたので、まずコメントアウトします
※公式rpmでインストールすると、5.6ではmy.cnfが2つ存在するので注意 (5.7.5では/etc/my.cnfのみでした)
/usr/my.cnf /etc/my.cnf
!参考ページ
MySQL5.6が勝手にsql_modeを書き換えてくれる話 http://yoku0825.blogspot.jp/2013/03/mysql56sqlmode.html
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
MySQL 5.6のsql_modeデフォルト値
MySQL 5.7のsql_modeデフォルト値
5.7のsql_modeデフォルト値で 曖昧なSQLがエラーになる事を確認
該当箇所のソースを確認してみる
http://bazaar.launchpad.net/~mysql/mysql-server/5.6/view/head:/sql/sys_vars.cc#L28575.6
http://bazaar.launchpad.net/~mysql/mysql-server/5.7/view/head:/sql/sys_vars.cc#L32235.7
5.7系で変更が入ったリビジョン
http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/8655/sql/sys_vars.cc#sql/sys_vars.ccrev 8655 (2014-08-24)
http://dev.mysql.com/worklog/task/?id=2489Worklog
MySQL5.7にバージョンアップ する際には注意しましょう!
おしまい