web-dev-qa-db-ja.com

MySQLがsql_mode(s)を認識しないのはなぜですか?

mysql -u <username> -p<password>を使用して端末からMySQLを起動しようとすると、次のエラーが発生します。

mysql:[ERROR]不明な変数 'sql_mode = STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION'

MySQLが.cnfファイルを検索する可能性のある3つの場所(Sudo /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"を実行して見つけた場所)のうち、存在するのは/etc/mysql/my.cnfだけです。その中には!includedir /etc/mysql/conf.d/を含むディレクトリしかありません。そこで、/etc/mysql/conf.d/mysql.cnfには次の行があります。

 [mysql]
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

答えを探し回ったが何も見つからなかった。モードのリストから特定の「悪いモード」を除外するために、1つずつ試してみましたが、それらはすべて認識されません。

この行を完全にコメント化することによってのみ、MySQLにログインして起動することができました。

誰かが問題が何であるか知っていますか?


プラットフォームとOSの側面:

  • 私が使用しているMySQLのバージョンは5.7.17です。
  • オペレーティングシステムはLubuntuバージョンです16.04、4.7.3-generic、x86_64
6
Hemulin

あなたの問題は非常に簡単です

次のものがあります

[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

sql_modeはmysqlクライアントのオプションではありません。そのため、エラーメッセージはunknown variableです。

sql_modesql-modeがmysqlクライアントオプションに表示されないことに注意してください。

$ mysql --help | grep mode
                      Automatically switch to vertical output mode if the
                      work in batch mode. Disable with --disable-pager. This
  --ssl-mode=name     SSL connection mode.
  --ssl               Deprecated. Use --ssl-mode instead.
                      Deprecated. Use --ssl-mode=VERIFY_IDENTITY instead.
                      also. Does not work in batch mode. Disable with
  --binary-mode       By default, ASCII '\0' is disallowed and '\r\n' is
                      \C and DELIMITER, in non-interactive mode (for input
                      expired password sandbox mode.
binary-mode                       FALSE

解決

sql_mode はmysqldのオプションです。

グループヘッダーを[mysqld]に変更するだけです

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

Mysqlを再起動する必要はありません。ログインして実行するだけ

mysql> SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

試してみる !!!

8
RolandoMySQLDBA