SQLモード

TiDBサーバーはさまざまなSQLモードで動作し、これらのモードをクライアントごとに異なる方法で適用します。 SQLモードは、以下に説明するように、TiDBがサポートするSQL構文と、実行するデータ検証チェックのタイプを定義します。

TiDBの起動後、 SET [ SESSION | GLOBAL ] sql_mode='modes'を変更してSQLモードを設定します。

SQLモードをGLOBALレベルで設定する場合は、 SUPERの特権があることを確認してください。このレベルでの設定は、後で確立される接続にのみ影響します。 SESSIONレベルでのSQLモードへの変更は、現在のクライアントにのみ影響します。

Modesは、コンマ('')で区切られた一連の異なるモードです。 SELECT @@sql_modeステートメントを使用して、現在のSQLモードを確認できます。 SQLモードのデフォルト値: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

重要なsql_mode

  • ANSI :このモードは標準SQLに準拠しています。このモードでは、データがチェックされます。データが定義されたタイプまたは長さに準拠していない場合、データタイプは調整またはトリミングされ、 warningが返されます。
  • STRICT_TRANS_TABLES :データが厳密にチェックされる厳密モード。誤ったデータがテーブルに挿入されると、エラーが返されます。
  • TRADITIONAL :このモードでは、TiDBは「従来の」SQLデータベースシステムのように動作します。誤った値が列に挿入されると、警告ではなくエラーが返されます。次に、 INSERTまたはUPDATEステートメントはすぐに停止されます。

SQLモードテーブル

名前説明
PIPES_AS_CONCAT
ANSI_QUOTES"を識別子として扱います。 ANSI_QUOTESが有効になっている場合、一重引用符のみが文字列リテラルとして扱われ、二重引用符は識別子として扱われます。したがって、二重引用符を使用して文字列を引用することはできません。 (フルサポート)
IGNORE_SPACEこのモードが有効になっている場合、システムはスペースを無視します。例:「user」と「user」は同じです。 (フルサポート)
ONLY_FULL_GROUP_BYSELECT 、またはHAVINGで参照される非集約列がORDER BYに存在しない場合、このSQLステートメントは無効です。これは、列がGROUP BYに存在しGROUP BYが、クエリによって表示されるのは異常であるためです。 (フルサポート)
NO_UNSIGNED_SUBTRACTIONオペランドに減算の記号がない場合、結果をUNSIGNEDとしてマークしません。 (フルサポート)
NO_DIR_IN_CREATEテーブルの作成時に、 INDEX DIRECTORYおよびDATA DIRECTORYのディレクティブをすべて無視します。このオプションは、セカンダリレプリケーションサーバーでのみ役立ちます(構文サポートのみ)。
NO_KEY_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどのMySQL固有の構文はエクスポートされません。 mysqldumpを使用してDBタイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ)
NO_FIELD_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどのMySQL固有の構文はエクスポートされません。 mysqldumpを使用してDBタイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ)
NO_TABLE_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどのMySQL固有の構文はエクスポートされません。 mysqldumpを使用してDBタイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ)
NO_AUTO_VALUE_ON_ZEROこのモードが有効になっている場合、 AUTO_INCREMENT列に渡される値が0または特定の値であると、システムはこの値をこの列に直接書き込みます。 NULLが渡されると、システムは自動的に次のシリアル番号を生成します。 (フルサポート)
NO_BACKSLASH_ESCAPESこのモードが有効になっている場合、 \の円記号はそれ自体を表すだけです。 (フルサポート)
STRICT_TRANS_TABLESトランザクションストレージエンジンの厳密モードを有効にし、不正な値が挿入された後、ステートメント全体をロールバックします。 (フルサポート)
STRICT_ALL_TABLESトランザクションテーブルの場合、不正な値が挿入された後、トランザクションステートメント全体をロールバックします。 (フルサポート)
NO_ZERO_IN_DATE月または日の部分が0の日付は受け入れられない厳密モード。 IGNOREオプションを使用する場合、TiDBは同様の日付に「0000-00-00」を挿入します。非厳密モードでは、この日付は受け入れられますが、警告が返されます。 (フルサポート)
NO_ZERO_DATE厳密モードでは、有効な日付として「0000-00-00」を使用しません。 IGNOREオプションを使用しても、ゼロの日付を挿入できます。非厳密モードでは、この日付は受け入れられますが、警告が返されます。 (フルサポート)
ALLOW_INVALID_DATESこのモードでは、システムはすべての日付の有効性をチェックしません。 1から12の範囲の月の値と1から31の範囲の日付の値のみをチェックします。このモードは、 DATE列とDATATIME列にのみ適用されます。 TIMESTAMP列すべてに完全な妥当性チェックが必要です。 (フルサポート)
ERROR_FOR_DIVISION_BY_ZEROこのモードが有効になっている場合、データ変更操作( INSERTまたはUPDATE )で0による除算を処理すると、システムはエラーを返します。
このモードが有効になっていない場合、システムは警告を返し、代わりにNULLが使用されます。 (フルサポート)
NO_AUTO_CREATE_USER指定されたパスワードを除いて、 GRANTが新しいユーザーを自動的に作成しないようにします(完全サポート)
HIGH_NOT_PRECEDENCENOT演算子の優先順位は、 NOT a BETWEEN b AND cなどの式がNOT (a BETWEEN b AND c)として解析されるようなものです。 MySQLの一部の古いバージョンでは、この式は(NOT a) BETWEEN b AND cとして解析されます。 (フルサポート)
NO_ENGINE_SUBSTITUTION必要なストレージエンジンが無効になっているか、コンパイルされていない場合に、ストレージエンジンが自動的に置き換えられないようにします。 (構文サポートのみ)
PAD_CHAR_TO_FULL_LENGTHこのモードが有効になっている場合、システムはCHARのタイプの末尾のスペースをトリミングしません。 (構文サポートのみ。このモードはMySQL8.0で非推奨になっています。)
REAL_AS_FLOATREALDOUBLEの同義語ではなく、 FLOATの同義語として扱います(完全サポート)
POSTGRESQLPIPES_AS_CONCAT NO_FIELD_OPTIONS ANSI_QUOTESIGNORE_SPACE NO_KEY_OPTIONS NO_TABLE_OPTIONS
MSSQLPIPES_AS_CONCAT NO_FIELD_OPTIONS ANSI_QUOTESIGNORE_SPACE NO_KEY_OPTIONS NO_TABLE_OPTIONS
DB2PIPES_AS_CONCAT NO_FIELD_OPTIONS ANSI_QUOTESIGNORE_SPACE NO_KEY_OPTIONS NO_TABLE_OPTIONS
MAXDBPIPES_AS_CONCAT NO_TABLE_OPTIONS ANSI_QUOTES NO_FIELD_OPTIONS IGNORE_SPACE NO_KEY_OPTIONS NO_AUTO_CREATE_USER
MySQL323NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCE (構文サポートのみ)
MYSQL40NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCE (構文サポートのみ)
ANSIREAL_AS_FLOATPIPES_AS_CONCATANSI_QUOTES IGNORE_SPACEのみ)
TRADITIONALSTRICT_TRANS_TABLES NO_AUTO_CREATE_USER STRICT_ALL_TABLESNO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO
ORACLEPIPES_AS_CONCAT NO_FIELD_OPTIONS ANSI_QUOTES NO_AUTO_CREATE_USER IGNORE_SPACE NO_KEY_OPTIONS NO_TABLE_OPTIONS

このページは役に立ちましたか?