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 : Strict モード。データが厳密にチェックされます。テーブルに誤ったデータが挿入されると、エラーが返されます。
  • TRADITIONAL : このモードでは、TiDB は「従来の」SQL データベース システムのように動作します。不正な値が列に挿入されると、警告ではなくエラーが返されます。次に、 INSERTまたはUPDATEステートメントがすぐに停止します。

SQL モード テーブル

名前説明
PIPES_AS_CONCAT
ANSI_QUOTES"を識別子として扱います。 ANSI_QUOTESが有効な場合、一重引用符のみが文字列リテラルとして扱われ、二重引用符は識別子として扱われます。したがって、二重引用符を使用して文字列を引用することはできません。 (フルサポート)
IGNORE_SPACEこのモードが有効な場合、システムはスペースを無視します。例: "user""user " は同じです。 (フルサポート)
ONLY_FULL_GROUP_BYSELECTHAVING 、またはORDER BYで参照されている集計されていない列がGROUP BYに存在しない場合、 GROUP BYに存在しない列がクエリによって表示されるのは異常であるため、この SQL ステートメントは無効です。 (フルサポート)
NO_UNSIGNED_SUBTRACTIONオペランドに減算の記号がない場合、結果をUNSIGNEDとしてマークしません。 (フルサポート)
NO_DIR_IN_CREATEテーブルの作成時に、 INDEX DIRECTORYDATA 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タイプの末尾のスペースをトリムしません。 (構文サポートのみ。このモードはMySQL 8.0 で非推奨です。)
REAL_AS_FLOATREALDOUBLEのシノニムではなく、 FLOATのシノニムとして扱います (完全サポート)
POSTGRESQLPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSと同等 (構文サポートのみ)
MSSQLPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSと同等 (構文サポートのみ)
DB2PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSと同等 (構文サポートのみ)
MAXDBPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSNO_AUTO_CREATE_USERに相当 (完全サポート)
MySQL323NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCEと同等 (構文サポートのみ)
MYSQL40NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCEと同等 (構文サポートのみ)
ANSIREAL_AS_FLOATPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACEと同等 (構文サポートのみ)
TRADITIONALSTRICT_TRANS_TABLESSTRICT_ALL_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERONO_AUTO_CREATE_USERと同等 (構文サポートのみ)
ORACLEPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSNO_AUTO_CREATE_USERと同等 (構文サポートのみ)