web-dev-qa-db-ja.com

MySQL:sql_modeを永続的に設定する

MySQLコマンドラインクライアントを介して、グローバルmysql_modeを設定しようとしています。

SET GLOBAL sql_mode = TRADITIONAL;

これは現在のセッションでは機能しますが、サーバーを再起動すると、sql_modeはデフォルトの ''、空の文字列に戻ります。

Sql_modeをTRADITIONALに永続的に設定するにはどうすればよいですか?

関連する場合、MySQLはWAMPパッケージの一部です。

ありがとうございました。

26
George Newton

これをmy.cnfファイル(またはWindowsを使用している場合はmy.ini)に追加します。

sql_mode="TRADITIONAL"

サーバーを再起動します

21
fancyPants

MySQL sql_mode "TRADITIONAL"、別名「厳格モード」は、 MySQL docs によって定義されます。

間違った値を列に挿入する場合、「警告ではなくエラーを表示」。

Sql_modeが"TRADITIONAL"に設定されていることを確認する方法は次のとおりです。

まず、現在の設定を確認します:

mysql
mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.00 sec)

これは、デフォルトの空白を返しましたが、それは悪いことです。sql_modeが「TRADITIONAL」に設定されていません。

だから設定ファイルを編集します:

Sudo vim /etc/mysql/my.cnf

[mysqld]というラベルのセクションにこの行を追加します:sql_mode="TRADITIONAL"(fancyPantsが指摘したように)

次に、サーバーを再起動します:

Sudo service mysql restart

それからもう一度チェックしてください:

mysql
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

成功!あなたは今黄金です。

22
Michael Currie