古いWebアプリケーションフレームワークをつかい
MySQL5.6までのMySQLデータベースをつかったアプリケーションを
MySQL5.7のサーバーに移転するにあたり
ORDER BY clause is not in SELECT list, references column...
というようなエラーが出た場合、MySQL5.7より「ONLY_FULL_GROUP_BY」がオンになっていることが原因だ。
このあたりは、すでに多くの先駆者が設定について書いてくださっている。
- http://blog.prophet.jp/2951
- https://blog.kamipo.net/entry/2015/12/14/171838
- https://qiita.com/shiutk/items/9176e6d76c1707bc36c7
など。大変ありがたい情報だ。
しかし、さくらインターネットでは権限がない
さくらインターネットなど共有サーバーでは、これらの設定については、
権限付与がなく設定ができない。
さてどうしたものか。。。
そのセッションのみで、(MySQL Workbenchをつかっている経験から)SQLMODEの変更ができるはず。
ということで
SET SESSION sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
毎回接続時に実行できればOKなはず。と考察して、調べた結果問題なしでした。
各フレームワークや、自作のシステムの場合も、
mysqli_connect関数の直後や、new PDO()直後あたりで毎回実行するようにすればOKです。
コメントを残す