SQLモード TiDBサーバーは複数のSQLモードで動作し、クライアントごとに異なる方法でこれらのモードを適用します。SQLモードでは、TiDBがサポートするSQL構文と実行するデータ検証チェックの種類が定義されます。詳細は以下のとおりです。
TiDB の起動後、 SET [ SESSION | GLOBAL ] sql_mode='modes'ステートメントを使用して 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_BYSQL ステートメントがSELECT 、 HAVING 、またはORDER BY内の列を参照している場合、その列は集計されておらず、 GROUP BY句にも含まれていないため、無効となります。これは、そのような列をクエリ結果に表示することが異常であるためです。この設定は、 tidb_enable_new_only_full_group_by_check システム変数によって影響を受けます。(完全サポート) NO_UNSIGNED_SUBTRACTION減算演算において被演算項に記号がない場合、結果をUNSIGNEDとしてマークしません。(完全対応) NO_DIR_IN_CREATEテーブル作成時に、 INDEX DIRECTORYおよびDATA DIRECTORYディレクティブをすべて無視します。このオプションは、セカンダリレプリケーションサーバー(構文サポートのみ)でのみ有効です。 NO_KEY_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどの MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースの種類を移行する場合は、このオプションを検討してください。(構文のみサポート)NO_FIELD_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどの MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースの種類を移行する場合は、このオプションを検討してください。(構文のみサポート)NO_TABLE_OPTIONSSHOW CREATE TABLEステートメントを使用する場合、 ENGINEなどの MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースの種類を移行する場合は、このオプションを検討してください。(構文のみサポート)NO_AUTO_VALUE_ON_ZEROこのモードが有効になっている場合、 AUTO_INCREMENT 列に渡された値が0または特定の値である場合、システムはこの値を直接この列に書き込みます。 NULLが渡された場合、システムは自動的に次のシリアル番号を生成します。(完全サポート) NO_BACKSLASH_ESCAPESこのモードが有効になっている場合、 \バックスラッシュ記号はそれ自体のみを表します。(完全サポート) STRICT_TRANS_TABLESトランザクションstorageエンジンの厳格モードを有効にし、無効な値が挿入された後にステートメント全体をロールバックします。(完全サポート) 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このモードが有効になっている場合、システムはデータ変更操作( 0またはINSERTでUPDATEによる除算を処理する際にエラーを返します。 このモードが有効になっていない場合、システムは警告を返し、代わりにNULLが使用されます。(完全サポート) NO_AUTO_CREATE_USERGRANT 、指定されたパスワード以外の新規ユーザーを自動的に作成することを防止します(完全サポート)。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必要なstorageエンジンが無効化されているかコンパイルされていない場合、storageエンジンの自動置換を防止します。(構文サポートのみ) PAD_CHAR_TO_FULL_LENGTHこのモードが有効な場合、システムはCHARタイプの末尾のスペースをトリミングしません。 (構文サポートのみ。このモードはMySQL 8.0で非推奨になりました 。) REAL_AS_FLOATREAL FLOATの同義語として扱い、 DOUBLEの同義語としては扱いません(完全サポート)。POSTGRESQLPIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS (構文のみサポート)。MSSQLPIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS (構文のみサポート)。DB2PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS (構文のみサポート)。MAXDBPIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS 、 NO_AUTO_CREATE_USERと同等(完全サポート)MySQL323NO_FIELD_OPTIONS 、 HIGH_NOT_PRECEDENCEと同等です(構文サポートのみ)。MYSQL40NO_FIELD_OPTIONS 、 HIGH_NOT_PRECEDENCEと同等です(構文サポートのみ)。ANSIREAL_AS_FLOAT 、 PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 ONLY_FULL_GROUP_BYと同等です(構文のみサポート)。TRADITIONALSTRICT_TRANS_TABLES 、 STRICT_ALL_TABLES 、 NO_ZERO_IN_DATE 、 NO_ZERO_DATE 、 ERROR_FOR_DIVISION_BY_ZERO 、 NO_AUTO_CREATE_USER (構文のみサポート)。ORACLEPIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS 、 NO_AUTO_CREATE_USER (構文のみサポート)。