sql_mode は見落とされやすい変数です。デフォルト値は null です。この設定では、不正なデータの挿入を許可するなど、一部の不正な操作が許可される可能性があります。この値は実稼働環境では厳密モードに設定する必要があるため、開発およびテスト段階で問題を発見できるように、開発およびテスト環境のデータベースも設定する必要があります。
1、SQL を実行して
select @@session.sql_mode;
グローバル レベルを表示します: 表示
select @@global.sql_mode;
2、修正
set @@session.sql_mode='xx_mode' set session sql_mode='xx_mode'
グローバル レベル: 修正
set global sql_mode='xx_mode'; set @@global.sql_mode='xx_mode';
session は省略できます。デフォルトのセッションは現在のセッションでのみ有効です。
グローバルに変更する場合は、高度な権限が必要です。これは次の接続でのみ有効になり、現在のセッションには影響しません。 MySQL の再起動後は設定ファイル内の対応する値を再読み込みするため無効になります。永続的にする必要がある場合は、設定ファイル内の値を変更する必要があります。
vi /etc/my.cnf
保存して終了し、サーバーを再起動すると、永続的に有効になります
ONLY_FULL_GROUP_BY
GROUP BY 集計操作の場合、SELECT の列が GROUP BY に現れない場合、その列が GROUP BY 句にないため、この SQL は無効になります
NO_AUTO_VALUE_ON_ZERO
この値は、自動拡張列の挿入に影響します。デフォルト設定では、0 または NULL を挿入すると、次の自動増加値が生成されます。このオプションは、ユーザーが値 0 を挿入する必要があり、列が自動増加する場合に便利です。
STRICT_TRANS_TABLES
このモードでは、トランザクション テーブルに値を挿入できない場合、現在の操作は中断され、非トランザクションに対する制限はありません。 tables
NO_ZERO_IN_DATE
厳密モードでは、日付または月をゼロにすることはできません。日付の月または日が 0 の値を含む限り、エラーが報告されますが、'0000-00-00 '例外
NO_ZERO_DATE
この値を設定すると、mysql データベースはゼロ日付の挿入を許可しません。ゼロの日付を挿入すると、警告ではなくエラーがスローされます。 0 以外の年、月、日のいずれかが要件を満たします。「0000-00-00」のみがエラー
ERROR_FOR_pISION_BY_ZERO
を報告します。 INSERT または UPDATE プロセス (データをゼロで除算すると、警告ではなくエラーが生成される場合)。モードが指定されていない場合、データがゼロで除算されると MySQL は NULL を返します
update table set num = 5 / 0; モードの設定後にエラーが報告されます。設定されていない場合、変更は次のようになります。成功すると、num の値は null
NO_AUTO_CREATE_USER
GRANT による空のパスワードを持つユーザーの作成を禁止します
#NO_ENGINE_SUBSTITUTION
必要なストレージ エンジンが無効になっているかコンパイルされていない場合、エラーがスローされます。この値が設定されていない場合、代わりにデフォルトのストレージ エンジンが使用され、例外がスローされます。
PIPES_AS_CONCAT
「||」を文字列接続演算子として扱う代わりにOR 演算子。これは Oracle データベースと同じであり、文字列スプライシング関数 Concat に似ています。
ANSI_QUOTES
ANSI_QUOTES を有効にした後は、二重引用符を使用できません。識別子として解釈されるため、文字列を引用符で囲むマーク
関連する推奨事項: "mysql チュートリアル "
以上がmysql の sql_mode 設定を修正するコツを教えますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。