sql >> データベース >  >> RDS >> Mysql

MySQL5.7で厳密なSQLモードを無効にする方法

    アプリが古いバージョンのMySQL用に作成されており、MySQL 5.7の厳密なSQLモードと互換性がない場合は、厳密なSQLモードを無効にすることができます。たとえば、WHMCS6やCraft2などのアプリは厳密なSQLモードをサポートしていません。

    WHMCS 7を使用している場合は、WHMCS7用のMySQLのカスタマイズに関する記事を参照してください。

    厳密なSQLモードを無効にするには、 rootとしてサーバーにSSHで接続します。 nanoを使用して新しい構成ファイルを作成します または選択したエディター:

    sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

    ファイルに次の2行を入力します:

    [mysqld]
    sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    CTRL + Xを押してファイルを保存します 、次に y 、次に ENTER 変更を確認します。

    最後に、次のコマンドでMySQLを再起動します。

    sudo service mysql restart

    この変更により、MySQL 5.7で追加された2つのSQLモード設定STRICT_TRANS_TABLESとONLY_FULL_GROUP_BYが無効になり、一部の古いアプリケーションで問題が発生します。

    厳密なSQLモードが無効になっていることの確認

    このコマンドをrootとして実行すると、厳密なSQLモードが無効になっていることを確認できます。 :

    sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

    strictモードが無効になっている場合、そのコマンドからの出力は表示されません。

    ストリクトモードを無効にすると問題が発生する場合は、そのファイルを削除してMySQLを再起動することで再度有効にできます。

    厳密なSQLモードエラーはどのように見えるか

    アプリが厳密なSQLモードと互換性がない場合、次のようなSQLエラーが頻繁に発生します。

    SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of
    SELECT list is not in GROUP BY clause and contains nonaggregated column
    'yourdbname.tblannouncements.date' which is not functionally dependent on
    columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    と互換性がありません
    1. OracleとSQLServerのスペースの処理の違い

    2. 指定されたテーブルの動的な列のセットを返す関数

    3. 単一のクエリ(再帰クエリ)でmysqlテーブル内のすべての親を検索する

    4. SQL ServerManagementStudioで記憶されているログインとパスワードのリストを削除する