MySQLは、変数 sql_modeのデフォルト値を変更しました いくつかのアプリケーションで既存のコードを壊している以前のリリース以来。このチュートリアルでは、アプリケーションの機能に応じてsql_modeを変更する方法について説明します。また、サーバーの再起動時にこの値を保持するための手順も提供します。
メモ :MySQLチュートリアル(UbuntuにMySQL 8をインストールする方法、UbuntuからMySQLを完全に削除する方法、MySQLを使用した基本的なSQLクエリを学ぶ方法)に従うこともできます。
MySQL8の変数sql_modeのデフォルト値は次のとおりです。
# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
私の場合、オプション ONLY_FULL_GROUP_BY コードが壊れているため、デモ用に削除します
直接更新
sql_modeの値を直接更新できます 以下に示すコマンドを使用します。
# Login
mysql -u root -p
# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
sql_mode値は、上記のクエリを使用して変更されます。問題は、サーバーの再起動時に変数がデフォルト値に戻ることです。次のセクションに示すように、値を保持できます。
永続的に更新
my.cnf を更新することで、sql_modeの値を保持できます。 ファイル。このファイルの場所は、サーバー環境とバージョンによって異なります。このファイルの最も一般的な場所には、 / etc/my。
LinuxMint18の場合 、ファイルの場所は /
# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"
# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
MySQLサーバーは、システムレベルとローカルレベルの両方で、デフォルト構成について上記の場所を調べます。以下に示すようにmy.cnfファイルを更新します。デモにnanoエディターを使用しました
# Update my.cnf
sudo nano /etc/mysql/my.cnf
# Scroll down and update the file as shown below
...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
次に、ファイルを保存して、エディターを終了します。必ず[mysqld]を含めてください 変数の上。
MySQLサーバーを再起動して、上記のようにmy.cnfファイルで構成された変数sql_modeの値を設定します。
# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart
# Using service
sudo service mysql restart
# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql
概要
このチュートリアルでは、MySQL変数 sql_modeの値を更新しました また、サーバーの再起動時に永続的に保存されます。