説明
この変数はV1.4バージョンから導入されました。
機能の概要
sql_modeはSQLモードを設定するために使用され、異なるSQLモードはデータベースの動作に大きな影響を与えます。
説明
この変数はOceanBaseデータベースのMySQLモードにのみ適用されます。
権限要件
変数の確認
グローバルレベル
sysテナントとすべてのユーザーテナントはSHOW VARIABLESステートメント、またはinformation_schema.GLOBAL_VARIABLESビュー(MySQLモード)を使用してグローバルシステム変数の値を確認できます。
セッションレベル
sysテナントとすべてのユーザーテナントはSHOW VARIABLESステートメント、またはinformation_schema.SESSION_VARIABLESビュー(MySQLモード)を使用してセッションシステム変数の値を確認できます。
変数の変更
プロパティの説明
| プロパティ |
説明 |
| パラメータタイプ |
Uint |
| デフォルト値 |
STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER
説明
- V4.3.x系では、V4.3.0以降のバージョンからデフォルト値が
STRICT_ALL_TABLES,NO_ZERO_IN_DATEからSTRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USERに変更されました。
- V4.2.x系では、V4.2.1 BP1以降のバージョンからデフォルト値が
STRICT_ALL_TABLES,NO_ZERO_IN_DATEからSTRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USERに変更されました。
|
| 値の範囲 |
値は以下のいずれかの組み合わせにすることができます。
- ANSI_QUOTES:文字列のクォート文字(二重引用符「 」)を識別子のクォート文字(バッククォート` )として使用するため、二重引用符を使用して文字列を引用することはできません。
- ERROR_FOR_DIVISION_BY_ZERO:INSERTまたはUPDATEステートメントを使用する際に、データが0で割り算されるとエラーが発生します。
- ERROR_FOR_DIVISION_BY_ZEROモードが有効になっていない場合、データが0で割り算されるとNULLが返されます。
- ERROR_FOR_DIVISION_BY_ZEROモードが有効になっているが、厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)が有効になっていない場合、データが0で割り算されるとNULLが返されます。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とERROR_FOR_DIVISION_BY_ZEROモードの両方が有効になっている場合、データが0で割り算されることは許可されず、エラーが発生します。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とERROR_FOR_DIVISION_BY_ZEROモードの両方が有効になっており、ignoreが指定されている場合、データが0で割り算されるとNULLが返されます。
- HIGH_NOT_PRECEDENCE:NOT演算子の優先順位により、
NOT a BETWEEN b AND c などの式がNOT(a BETWEEN b AND c)として解析されます。
- IGNORE_SPACE:関数名と文字の間にスペースを含めることができます。このフィールドは現在互換性のためにのみ使用され、設定できますが無効です。
- NO_AUTO_CREATE_USER:GRANTステートメントを使用してパスワードが空のユーザーを作成することは許可されません。
- NO_DIR_IN_CREATE:テーブル作成時にINDEX DIRECTORYおよびDATA DIRECTORYコマンドをすべて無視します。このフィールドは現在互換性のためにのみ使用され、設定できますが無効であり、OceanBaseデータベースにおける動作はMySQLと異なります。
- NO_ENGINE_SUBSTITUTION:使用するストレージエンジンが無効またはコンパイルされていない場合、エラーが報告されます。この値が設定されていない場合、デフォルトのストレージエンジンが代わりに使用され、例外が表示されます。このフィールドは現在互換性のためにのみ使用され、設定できますが無効であり、OceanBaseデータベースにおける動作はMySQLと異なります。
- NO_FIELD_OPTIONS:
SHOW CREATE TABLEの出力にMySQLモード固有の列オプションを表示することはできません。
- NO_KEY_OPTIONS:
SHOW CREATE TABLEの出力にMySQLモード固有のインデックスオプションを表示することはできません。
- NO_TABLE_OPTIONS:
SHOW CREATE TABLEの出力にMySQLモード固有のテーブルオプション(例:ENGINE)を表示することはできません。
- NOUnsigned_SUBTRACTION:デフォルトでは、整数値間の減算(そのうちの1つがUNSIGNEDタイプ)は符号なし結果を生成します。
- NO_ZERO_DATE:'0000-00-00'形式の日付を許可するかどうか。
- NO_ZERO_DATEモードが有効になっていない場合、'0000-00-00'形式の日付が許可されます。
- NO_ZERO_DATEモードが有効になっているが、厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)が有効になっていない場合、'0000-00-00'形式の日付が許可されます。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とNO_ZERO_DATEモードの両方が有効になっている場合、'0000-00-00'形式の日付は許可されず、エラーが発生します。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とNO_ZERO_DATEモードの両方が有効になっており、ignoreが指定されている場合、'0000-00-00'形式の日付が許可されます。
- NO_ZERO_IN_DATE:年が0以外で月または日が0の形式のログ(例:'2010-00-01'または'2010-01-00')を許可します。
- NO_ZERO_IN_DATEモードが有効になっていない場合、年が0以外で月または日が0の形式の日付が許可されます。
- NO_ZERO_IN_DATEモードが有効になっているが、厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)が有効になっていない場合、年が0以外で月または日が0の形式の日付は'0000-00-00'形式の日付に変換されます。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とNO_ZERO_IN_DATEモードの両方が有効になっている場合、年が0以外で月または日が0の形式の日付は許可されず、エラーが発生します。
- 厳密なSQLモード(STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES)とNO_ZERO_IN_DATEモードの両方が有効になっており、ignoreが指定されている場合、年が0以外で月または日が0の形式の日付は'0000-00-00'形式の日付に変換されます。
- ONLY_FULL_GROUP_BY:SELECTリスト、HAVING条件、またはORDER BY列には、GROUP BY列によって一意に決定される列のみを含めることができます。
- PIPES_AS_CONCAT:(||)を文字列連結演算子(CONCAT()と同じ)と見なし、ORの同義語ではありません。
- PAD_CHAR_TO_FULL_LENGTH:CHAR検索時に列の末尾のスペースを保持します。また、検索されたCHAR値はその全長に補完されます。
- REAL_AS_FLOAT:デフォルトでは、REALはDOUBLEの同義語と見なされます。設定後、REALはFLOATの同義語と見なされます。
- STRICT_ALL_TABLES:すべてのストレージエンジンで厳密なSQLモードを有効にし、無効なデータ値を拒否します。
- STRICT_TRANS_TABLES:トランザクションストレージエンジンで厳密なSQLモードを有効にし、可能な場合は非トランザクションストレージエンジンでも厳密なSQLモードを有効にします。
- TIME_TRUNCATE_FRACTIONAL:小数秒部分を持つTIME、DATE、またはTIMESTAMP値を、同じタイプですが小数点以下の桁数が少ない列に挿入する際に、丸めが行われるかどうかを制御します。デフォルトは丸めですが、このモードを有効にすると切り捨てられます。
- ANSI:REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、およびONLY_FULL_GROUP_BYの組み合わせに相当します。
- 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の組み合わせに相当します。
- MSSQL:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONSの組み合わせに相当します。
- MYSQL323:HIGH_NOT_PRECEDENCEにMYSQL323の一部の機能を追加したものに相当します。
- MYSQL40:HIGH_NOT_PRECEDENCEにMYSQL40の一部の機能を追加したものに相当します。
- ORACLE:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USERの組み合わせに相当します。
- POSTGRESQL:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONSの組み合わせに相当します。
|
| 適用範囲 |
|
| 変更は可能か |
はい。SET ステートメントを使用して変更できます。 |
設定例
SQLモードをSTRICT_ALL_TABLES、NO_ZERO_IN_DATE、およびNO_AUTO_CREATE_USERに設定します。
セッション有効
obclient> SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER';
グローバル有効
obclient> SET GLOBAL sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER';
関連ドキュメント
INFORMATION_SCHEMA TRIGGERS