サードパーティツールとの既知の非互換性の問題
注記:
サポートされていない機能セクションには、TiDB でサポートされていない次の機能がリストされています。
- ストアド プロシージャと関数
- トリガー
- イベント
- ユーザー定義関数
SPATIAL関数、データ型、インデックスXAの構文上記のサポートされていない機能は予期された動作であるため、このドキュメントには記載されていません。詳細については、 MySQL の互換性を参照してください。
このドキュメントに記載されている非互換性の問題は、一部のTiDB によってサポートされるサードパーティ ツールで発生します。
一般的な非互換性
SELECT CONNECTION_ID() TiDB の 64 ビット整数を返します
説明
SELECT CONNECTION_ID()関数は、TiDB では2199023260887などの 64 ビット整数を返しますが、MySQL では391650などの 32 ビット整数を返します。
回避方法
TiDB アプリケーションでは、データのオーバーフローを避けるために、 SELECT CONNECTION_ID()の結果を格納するために 64 ビットの整数または文字列型を使用する必要があります。たとえば、 JavaではLongまたはString使用し、JavaScript または TypeScript ではstringを使用できます。
TiDB はCom_*カウンターを維持しません
説明
MySQL は、データベースに対して実行された操作の合計数を追跡するために、一連のCom_で始まるサーバーステータス変数維持します。たとえば、 Com_select 、(ステートメントが正常にクエリされなかった場合でも) MySQL が最後に起動されてから開始されたSELECTのステートメントの合計数を記録します。 TiDB はこれらの変数を管理しません。ステートメントSHOW GLOBAL STATUS LIKE 'Com_%'を使用すると、TiDB と MySQL の違いを確認できます。
回避方法
これらの変数は使用しないでください。一般的なシナリオの 1 つはモニタリングです。 TiDB は十分に観察可能であり、サーバーのステータス変数からクエリを実行する必要はありません。カスタム監視ツールについては、 TiDB モニタリング フレームワークの概要を参照してください。
TiDB はエラー メッセージでTIMESTAMPとDATETIMEを区別します
説明
TiDB エラー メッセージはTIMESTAMPとDATETIMEを区別しますが、MySQL は区別せず、すべてDATETIMEとして返します。つまり、MySQL はTIMESTAMPタイプのエラー メッセージを誤ってDATETIMEタイプに変換します。
回避方法
文字列の照合にエラー メッセージを使用しないでください。代わりに、トラブルシューティングにはエラーコードを使用してください。
TiDB はCHECK TABLEステートメントをサポートしていません
説明
CHECK TABLEステートメントは TiDB ではサポートされていません。
回避方法
データと対応するインデックスの一貫性をチェックするには、TiDB のADMIN CHECK [TABLE|INDEX]ステートメントを使用できます。
MySQL JDBC との互換性
テスト バージョンは MySQL Connector/J 8.0.29 です。
デフォルトの照合順序が矛盾しています
説明
MySQL Connector/J の照合順序はクライアント側に保存され、サーバーのバージョンによって区別されます。
次の表は、文字セットにおけるクライアント側とサーバー側の既知の照合順序順序の不一致を示しています。
| キャラクター | クライアント側のデフォルトの照合順序 | サーバー側のデフォルトの照合順序 |
|---|---|---|
ascii | ascii_general_ci | ascii_bin |
latin1 | latin1_swedish_ci | latin1_bin |
utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_bin |
回避方法
照合順序を手動で設定し、クライアント側のデフォルトの照合照合順序に依存しないでください。クライアント側のデフォルトの照合順序は、 MySQL Connector/J 構成ファイルによって保存されます。
NO_BACKSLASH_ESCAPESパラメータは有効になりません
説明
TiDB では、 \文字をエスケープせずにNO_BACKSLASH_ESCAPESパラメータを使用することはできません。詳細については、この問題を参照してください。
回避方法
TiDB ではNO_BACKSLASH_ESCAPESと\使用せず、SQL ステートメントでは\\を使用してください。
INDEX_USED関連パラメータはサポートされていません
説明
TiDB はプロトコルのSERVER_QUERY_NO_GOOD_INDEX_USEDおよびSERVER_QUERY_NO_INDEX_USEDパラメータを設定しません。これにより、実際の状況と一致しない以下のパラメータが返されます。
com.mysql.cj.protocol.ServerSession.noIndexUsed()com.mysql.cj.protocol.ServerSession.noGoodIndexUsed()
回避方法
TiDB ではnoIndexUsed()およびnoGoodIndexUsed()関数を使用しないでください。
enablePacketDebugパラメータはサポートされていません
説明
TiDB はパケットデバッグを有効にするパラメータをサポートしていません。これは、データ パケットのバッファを保持するデバッグに使用される MySQL Connector/J パラメータです。これにより、接続が予期せず終了する可能性があります。電源を入れないでください。
回避方法
TiDB ではenablePacketDebugパラメータを設定しないでください。
UpdatableResultSet はサポートされていません
説明
TiDB はUpdatableResultSetをサポートしていません。 ResultSet.CONCUR_UPDATABLEパラメータを指定したり、 ResultSet内のデータを更新したりしないで**ください**。
回避方法
トランザクションごとにデータの一貫性を確保するには、 UPDATEステートメントを使用してデータを更新します。
MySQL JDBC のバグ
useLocalTransactionStateとrewriteBatchedStatements同時に true の場合、トランザクションはコミットまたはロールバックに失敗します。
説明
useLocalTransactionStateとrewriteBatchedStatementsパラメータを同時にtrueに設定すると、トランザクションのコミットに失敗する可能性があります。 このコードで再現できます。
回避方法
注記:
このバグは MySQL JDBC に報告されています。プロセスを追跡するには、このバグレポートに従ってください。
useLocalTransactionStateをオンにしないでください。これにより、トランザクションのコミットまたはロールバックが妨げられる可能性があります。
コネクタは 5.7.5 より前のサーバーバージョンと互換性がありません
説明
MySQLサーバー< 5.7.5 プロトコルを使用するデータベース (v6.3.0 より前の TiDB など) を使用する場合、特定の条件下でデータベース接続がハングする場合があります。詳細については、 バグレポート参照してください。
回避方法
これは既知の問題です。 2022 年 10 月 12 日の時点で、MySQL Connector/J はこの問題を修正していません。
TiDB は次の方法でこの問題を修正します。
- クライアント側: このバグはpingcap/mysql-connector-jで修正されており、公式の MySQL Connector/J の代わりにpingcap/mysql-connector-j使用できます。
- サーバー側: この互換性の問題は TiDB v6.3.0 以降修正されており、サーバーをv6.3.0 以降のバージョンにアップグレードできます。
Sequelizeとの互換性
このセクションで説明する互換性情報はシークライズ v6.32.1に基づいています。
テスト結果によると、TiDB は Sequelize 機能のほとんどをサポートしています ( MySQL方言として使用する )。
サポートされていない機能は次のとおりです。
GEOMETRYはサポートされていません。- 整数の主キーの変更はサポートされていません。
PROCEDUREはサポートされていません。READ-UNCOMMITTEDとSERIALIZABLE分離レベルはサポートされていません。- デフォルトでは、列の
AUTO_INCREMENT属性の変更は許可されていません。 FULLTEXT、HASH、およびSPATIALインデックスはサポートされていません。sequelize.queryInterface.showIndex(Model.tableName);はサポートされていません。sequelize.options.databaseVersionはサポートされていません。queryInterface.addColumnを使用した外部キー参照の追加はサポートされていません。
整数の主キーの変更はサポートされていません
説明
整数の主キーの変更はサポートされていません。 TiDB は、主キーが整数型の場合、主キーをデータ編成のインデックスとして使用します。詳細については、 問題 #18090とクラスター化インデックスを参照してください。
READ-UNCOMMITTEDおよびSERIALIZABLE分離レベルはサポートされていません
説明
TiDB は、 READ-UNCOMMITTEDおよびSERIALIZABLE分離レベルをサポートしていません。分離レベルがREAD-UNCOMMITTEDまたはSERIALIZABLEに設定されている場合、TiDB はエラーをスローします。
回避方法
TiDB がサポートする分離レベル ( REPEATABLE-READまたはREAD-COMMITTEDのみを使用します。
分離レベルSERIALIZABLEを設定するがSERIALIZABLEに依存しない他のアプリケーションと TiDB に互換性を持たせたい場合は、 tidb_skip_isolation_level_checkから1に設定できます。このような場合、TiDB はサポートされていない分離レベルのエラーを無視します。
デフォルトでは、列のAUTO_INCREMENT属性の変更は許可されていません
説明
デフォルトでは、 ALTER TABLE MODIFYまたはALTER TABLE CHANGEコマンドを使用して列のAUTO_INCREMENT属性を追加または削除することはできません。
回避方法
AUTO_INCREMENTの制限事項を参照してください。
AUTO_INCREMENT属性の削除を許可するには、 @@tidb_allow_remove_auto_incをtrueに設定します。
FULLTEXT 、 HASH 、およびSPATIALインデックスはサポートされていません
説明
FULLTEXT 、 HASH 、およびSPATIALインデックスはサポートされていません。