📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

SQLモード



TiDBサーバーは複数のSQLモードで動作し、クライアントごとに異なる方法でこれらのモードを適用します。SQLモードでは、TiDBがサポートするSQL構文と実行するデータ検証チェックの種類が定義されます。詳細は以下のとおりです。

TiDB の起動後、 SET [ SESSION | GLOBAL ] sql_mode='modes'ステートメントを使用して SQL モードを設定できます。

  • SUPERレベルで SQL モードを設定する際は、 GLOBAL権限を持っていることを確認してください。このレベルでの設定は、その後確立される接続にのみ影響します。

  • 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_BYSQL ステートメントがSELECTHAVING 、または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またはINSERTUPDATEによる除算を処理する際にエラーを返します。
このモードが有効になっていない場合、システムは警告を返し、代わりに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_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_SPACEONLY_FULL_GROUP_BYと同等です(構文のみサポート)。
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 (構文のみサポート)。

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