MySQLの研究では、プロパティをノートSQL_MODE

最近の研究で、「MySQLの技術インサイダー:SQLプログラミング」では、メモを取り、このブログのノートは、ブログの一種で、後で自分のレビューを容易にするため、それを共有、それはまた、他の人を助けることができます

SQL_MODEは:MySQLは、非常に汎用性の高いユニークな性質であり、特定の機能をサポートするためのプロパティを設定することによって達成することができます

 # 全局的SQL_MODE 
 SELECT @@global.sql_mode;
 # 当前会话的SQL_MODE
 SELECT @@session.sql_mode; 

SQL_MODEデフォルト値は、それがSQL_MODE MySQL設定ファイル(のmy.iniまたはmy.cnfの)のために設けられ、又はコマンド上に直接配置することができ、空であります

strictモード:sql_modeののSTRICT_TRANS_TABLESまたはSTRICT_ALL_TABLESを指し、strictモードではヌルの要件に書かれているような非NULL値のフィールドとして不正な操作を、設定することが許可されていない、または書き込みは、2019年のように無効な日付データであり、 「-09-40

SET GLOBAL sql_mode ='STRICT_TRANS_TABLES';
SET GLOBAL sql_mode ='STRICT_ALL_TABLES';

データ元のデータが存在し、直接接続されて連結して、設定しないでください。

set @@session.sql_mode=concat(@@sql_mode,',IGNORE_SPACE');
  • STRICT_TRANS_TABLESは:strictモードを有効にし、値のみが(例えばストレージエンジンはInnoDBのある)トランザクションテーブルに書き込むことができない場合は、トランザクションテーブルには、非トランザクションテーブルには影響しません影響を与え、それが現在の操作が非トランザクションテーブルには影響しません割り込み(ストレージエンジンがMYISAMあるなど)
  • STRICT_ALL_TABLES:STRICT_ALL_TABLESを有効にすると、厳密モードはすべてのエンジンのためのテーブルで有効になっています
  • ANSI_QUOTES:ANSI_QUOTESは、このモードで開いているので、二重引用符は識別子として解釈され、文字列を二重引用符を参照するために使用することはできません、有効
  • ALLOW_INVALID_DATES:日付が1〜31で、このモードを有効にすると、わずか1〜12月かどうかをチェックし、例えば、検査日のために完全に開放されません、日付、日時タイプのため、このテストは可能ですが、タイムスタンプのためであります影響なし
  • ERROR_FOR_DIVISION_BY_ZERO:挿入または更新処理、データが0で除算された場合(またはMOD(
    X、0))エラーを生成し、オープンしない変更モードならば、データが0で除算し、NULL値がMySQLを返されます
  • HIGH_NOT_PRECEDENCEは、NOT:BとCの間が、MySQLの一部の古いバージョンでは(ない)と解釈されていない(BとCの間のa)のように解釈されるようにNOT BとCの間など、表現の優先順位の古いバージョンを開きますあなたはこの古いバージョンを使用したい場合はHIGH_NOT_PRECEDENCE NOTを開きます。
  • IGNORE_SPACE:関数名と括弧の間にスペースを無視し、このプロパティはデフォルトでオンになっていない、それは一般的に、このような特定の特殊事情として、オープンすることは推奨されません開くことができ、そのようなSELECT COUNTなどトンから(1);数の間にスペースがあるだろうエラーは、この状況は、テーブル名が、これはテーブル数のスペースではないだろう、エラーが発生した後に開くことはありませんが、テーブルやカラム名も名前の数がない限り、一般的に、関数空間とブラケットに直接ではありません名前が、関数の名前
  • NO_AUTO_CREATE_USER:GRANTは、ユーザーが空白のパスワードを作成禁止します
  • NO_AUTO_VALUE_ON_ZERO:このプロパティは自動的に列を増加するように設定されても、ゼロまたはヌル書き込まれたライトゼロ値を、許可されていない0が書かれている場合は、0を書き込まない、データシートには何もデータがなかった、オーダーを書きますアナロジー
  • NO_BACKSLASH_ESCAPES:バックスラッシュ「」としては通常の文字ではなく、エスケープ
  • NO_DIR_IN_CREATE:テーブルを作成するときに、すべてのインデックスディレクトリおよびDATE DIRECTORYオプションを無視
  • NO_ENGINE_SUBTRACTION:使用されるストレージ・エンジンは、デフォルトのストレージエンジンを使用し、コンパイル無効になっているかではなく、例外がスローされます
  • NO_UNSIGNED_SUBTRACTION:このプロパティを有効にする、符号付きの2つの符号なしの減算型の戻り値の型
  • NO_ZERO_DATE:0フォーマットは、このような、このプロパティを有効にした後、このタイプのデータが書き込まれますが、例外「0000-00-00午前0時00分00秒」などの日付への書き込みを許可していません
  • strictモードの場合は、ゼロの日と月が許可されていません。NO_ZERO_IN_DATE
  • ONLY_FULL_GROUP_BY:あなたはエラーが発生します]を選択した場合によってグループに記載されていません
  • PAD_CHAR_TO_FULL_LENGTH:0x20にのchar型のフィールドは、空のデータを傍受しないようにクエリ時間のために、いわゆる空のデータが自動的に入力されたデータ
CREATE TABLE t (a CHAR(10));
INSERT INTO t SELECT 'a';

ここに画像を挿入説明
デフォルトでは、クエリは、PAD_CHAR_TO_FULL_LENGTHを設定した場合、あるチェックアウトする、ということです。
ここに画像を挿入説明

  • REAL_AS_FLOAT:FLOATの同義語の代わりに、二重の同義語としてREAL
  • PIPES_AS_CONCAT:「||」文字列連結演算子は、同じオラクルであるとみなす、またはその代わりにオペレータの、及び

ここではいくつかのオプションの組み合わせは以下のとおりです。

  • ANSI:RELA_AS_FLOATに相当し、およびそれらの組み合わせPIPES_AS_CONCAT ANSI_QUOTES、IGNORE_SPACEの
  • ORACLE:組み合わせPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONSとNO_AUTO_CREATE_USERに相当
  • TRADITIONAL:等同于STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION的组合
  • MSSQL:組み合わせPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONSとNO_FIELD_OPTIONSに相当
  • DB2:組み合わせPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONSとNO_FIELD_OPTIONSに相当
  • MYSQL323:NO_FIELD_OPTIONSとHIGH_NOT_PRECEDENCEの組み合わせに相当
  • MYSQL40:NO_FIELD_OPTIONSとHIGH_NOT_PRECEDENCEの組み合わせに相当
  • MAXDB:組み合わせPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONSとNO_AUTO_CREATE_USERに相当

おすすめ

転載: www.cnblogs.com/mzq123/p/11668604.html