MySQLのSQLモード確認と変更方法
MySQL5.7.24にSQLモードというモードがあったのでメモです。
mysql> SELECT @@global.sql_mode; +----------------------------------------------------------------+ | @@global.sql_mode | +----------------------------------------------------------------+ | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +----------------------------------------------------------------+ 1 row in set (0.00 sec)
デフォルトではこのSQLモードが設定されています。
ONLY_FULL_GROUP_BYが指定されていないので、GROUP BY句で指定していないカラムがSELECT句で指定できてしまいます。
SELECT SUM(DEPOSIT_AMOUNT),ID,ACCOUNT_NUMBER -- ACCOUNT_NUMBERが指定できてしまう FROM GINKOU.ACCOUNT GROUP BY ID; -- IDごと
このSQLはOracleだとエラーになりますが、MySQLではmy.cnfの設定次第でいけてしまいます。
ONLY_FULL_GROUP_BYを指定する
my.cnf(Windowsの場合はmy.ini)のファイルを修正します。
my.cnfの場所は以下コマンドの結果の場所です。
mysql --help | grep my.cnf
my.iniの場所は以下です。
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
my.iniを修正します。
# Set the SQL mode to strict sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY"
my.iniを修正したらMySQLを再起動します。
サービス再起動したらSQLモードを確認します。
mysql> SELECT @@global.sql_mode; +-----------------------------------------------------------------------------------+ | @@global.sql_mode | +-----------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +-----------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
ONLY_FULL_GROUP_BYが追加されていることが確認できます。
これでGROUP BYで指定していないカラムをSELECT句で指定するとエラーとなります。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント