SQLモード
TiDB サーバーは異なる SQL モードで動作し、クライアントごとに異なるモードを適用します。SQL モードは、TiDB がサポートする SQL 構文と、実行するデータ検証チェックの種類を定義します。以下に説明します。
TiDB を起動した後、 SET [ SESSION | GLOBAL ] sql_mode='modes'ステートメントを使用して SQL モードを設定できます。
SQL モードを
GLOBALレベルに設定するときは、権限がSUPERあることを確認してください。このレベルでの設定は、その後に確立される接続にのみ影響します。SESSIONレベルでの SQL モードの変更は、現在のクライアントにのみ影響します。
この文では、 modesカンマ (',') で区切られたモードのセットです。3 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 | "識別子として扱います。3 ANSI_QUOTES有効にすると、一重引用符のみが文字列リテラルとして扱われ、二重引用符は識別子として扱われます。したがって、二重引用符は文字列を引用符で囲むために使用することはできません。(完全サポート) |
IGNORE_SPACE | このモードを有効にすると、システムはスペースを無視します。例:「user」と「user 」は同じ意味になります。(完全サポート) |
ONLY_FULL_GROUP_BY | SELECT 、 HAVING 、またはORDER BY列を参照するSQL文は、集計もGROUP BY節にも含まれず、無効です。これは、そのような列をクエリ結果に表示することが異常であるためです。この設定は、 tidb_enable_new_only_full_group_by_checkシステム変数の影響を受けます。(完全サポート) |
NO_UNSIGNED_SUBTRACTION | 減算においてオペランドに記号がない場合、結果をUNSIGNEDとしてマークしません。(完全サポート) |
NO_DIR_IN_CREATE | テーブル作成時にINDEX DIRECTORYとDATA DIRECTORYディレクティブをすべて無視します。このオプションはセカンダリレプリケーションサーバー(構文サポートのみ)でのみ有効です。 |
NO_KEY_OPTIONS | SHOW CREATE TABLE文を使用すると、 ENGINEような MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースタイプ間で移行する場合は、このオプションを検討してください。(構文サポートのみ) |
NO_FIELD_OPTIONS | SHOW CREATE TABLE文を使用すると、 ENGINEような MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースタイプ間で移行する場合は、このオプションを検討してください。(構文サポートのみ) |
NO_TABLE_OPTIONS | SHOW CREATE TABLE文を使用すると、 ENGINEような MySQL 固有の構文はエクスポートされません。mysqldump を使用してデータベースタイプ間で移行する場合は、このオプションを検討してください。(構文サポートのみ) |
NO_AUTO_VALUE_ON_ZERO | このモードを有効にすると、 AUTO_INCREMENT列目に渡された値が0または特定の値の場合、システムはその値を直接この列に書き込みます。5 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オプションを使用して日付を0として入力することは可能です。非厳密モードでは、この日付は受け入れられますが、警告が返されます。(完全サポート) |
ALLOW_INVALID_DATES | このモードでは、システムはすべての日付の有効性をチェックしません。1から1 12の月の値と1から31までの日の値のみをチェックします。このモードはDATE目とDATATIME列目にのみ適用されます。13列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 FLOATの同義語として扱い、 DOUBLEの同義語としては扱いません (完全サポート) |
POSTGRESQL | PIPES_AS_CONCAT NO_KEY_OPTIONS NO_TABLE_OPTIONS IGNORE_SPACE構文サポートNO_FIELD_OPTIONS ANSI_QUOTES |
MSSQL | PIPES_AS_CONCAT NO_KEY_OPTIONS NO_TABLE_OPTIONS IGNORE_SPACE構文サポートNO_FIELD_OPTIONS ANSI_QUOTES |
DB2 | PIPES_AS_CONCAT NO_KEY_OPTIONS NO_TABLE_OPTIONS IGNORE_SPACE構文サポートNO_FIELD_OPTIONS ANSI_QUOTES |
MAXDB | PIPES_AS_CONCAT NO_KEY_OPTIONS IGNORE_SPACE NO_FIELD_OPTIONS NO_AUTO_CREATE_USER NO_TABLE_OPTIONS ANSI_QUOTES |
MySQL323 | NO_FIELD_OPTIONSと同等(構文サポートのみHIGH_NOT_PRECEDENCE |
MYSQL40 | NO_FIELD_OPTIONSと同等(構文サポートのみHIGH_NOT_PRECEDENCE |
ANSI | REAL_AS_FLOAT ANSI_QUOTES相当(構文サポートIGNORE_SPACE PIPES_AS_CONCAT |
TRADITIONAL | STRICT_TRANS_TABLES NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ZERO_IN_DATE構文サポートNO_AUTO_CREATE_USER STRICT_ALL_TABLES |
ORACLE | PIPES_AS_CONCAT NO_TABLE_OPTIONS NO_KEY_OPTIONS IGNORE_SPACE構文NO_FIELD_OPTIONS NO_AUTO_CREATE_USER ANSI_QUOTES |