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_BY | SELECT 、 HAVING 、またはORDER BYで参照される非集計列がGROUP BYに存在しない場合、この SQL ステートメントは無効になります。これは、列がGROUP BYに存在しないのにクエリによって表示されるのは異常であるためです。 (フルサポート) |
NO_UNSIGNED_SUBTRACTION | オペランドに減算のシンボルがない場合、結果をUNSIGNEDとしてマークしません。 (フルサポート) |
NO_DIR_IN_CREATE | テーブルの作成時にINDEX DIRECTORYとDATA DIRECTORYディレクティブをすべて無視します。このオプションはセカンダリ レプリケーション サーバーにのみ役立ちます (構文サポートのみ) |
NO_KEY_OPTIONS | SHOW CREATE TABLEステートメントを使用すると、 ENGINEなどの MySQL 固有の構文はエクスポートされません。 mysqldump を使用して DB タイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ) |
NO_FIELD_OPTIONS | SHOW CREATE TABLEステートメントを使用すると、 ENGINEなどの MySQL 固有の構文はエクスポートされません。 mysqldump を使用して DB タイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ) |
NO_TABLE_OPTIONS | SHOW CREATE TABLEステートメントを使用すると、 ENGINEなどの MySQL 固有の構文はエクスポートされません。 mysqldump を使用して DB タイプ間で移行する場合は、このオプションを検討してください。 (構文サポートのみ) |
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 | このモードが有効な場合、データ変更操作 ( INSERTまたはUPDATE ) で0による除算を処理するときに、システムはエラーを返します。このモードが有効になっていない場合、システムは警告を返し、代わりに NULLが使用されます。 (フルサポート) |
NO_AUTO_CREATE_USER | 指定されたパスワードを除き、 GRANT新しいユーザーを自動的に作成しないようにします (完全サポート) |
HIGH_NOT_PRECEDENCE | NOT 演算子の優先順位は、 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_FLOAT | REAL DOUBLEの同義語ではなく、 FLOATの同義語として扱います (完全サポート) |
POSTGRESQL | PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONSと同等 (構文サポートのみ) |
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と同等 (構文サポートのみ) |
MAXDB | PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS 、 NO_AUTO_CREATE_USERに相当 (フルサポート) |
MySQL323 | NO_FIELD_OPTIONS 、 HIGH_NOT_PRECEDENCEと同等 (構文サポートのみ) |
MYSQL40 | NO_FIELD_OPTIONS 、 HIGH_NOT_PRECEDENCEと同等 (構文サポートのみ) |
ANSI | REAL_AS_FLOAT 、 PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACEと同等 (構文サポートのみ) |
TRADITIONAL | STRICT_TRANS_TABLES 、 STRICT_ALL_TABLES 、 NO_ZERO_IN_DATE 、 NO_ZERO_DATE 、 ERROR_FOR_DIVISION_BY_ZERO 、 NO_AUTO_CREATE_USERと同等 (構文サポートのみ) |
ORACLE | PIPES_AS_CONCAT 、 ANSI_QUOTES 、 IGNORE_SPACE 、 NO_KEY_OPTIONS 、 NO_TABLE_OPTIONS 、 NO_FIELD_OPTIONS 、 NO_AUTO_CREATE_USERと同等 (構文サポートのみ) |