サードパーティ製ツールとの既知の非互換性の問題
ノート:
サポートされていない機能番目のセクションには、次のような TiDB でサポートされていない機能がリストされています。
- ストアド プロシージャと関数
- トリガー
- イベント
- ユーザー定義関数
FOREIGN KEY
制約SPATIAL
関数、データ型、インデックスXA
構文上記のサポートされていない機能は予想される動作であり、このドキュメントには記載されていません。詳細については、 MySQL の互換性を参照してください。
このドキュメントに記載されている非互換性の問題は、いくつかのTiDB がサポートするサードパーティ ツールに見られます。
一般的な非互換性
SELECT CONNECTION_ID()
TiDB で 64 ビット整数を返します
説明
SELECT CONNECTION_ID()
関数は、TiDB では2199023260887
などの 64 ビット整数を返しますが、MySQL では391650
などの 32 ビット整数を返します。
回避方法
TiDB アプリケーションでは、データのオーバーフローを回避するために、64 ビット整数型または文字列型を使用してSELECT CONNECTION_ID()
の結果を格納する必要があります。たとえば、 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 はenablePacketDebugパラメータをサポートしていません。これは、データ パケットのバッファを保持するデバッグに使用される 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 または MySQLサーバー< 5.7.5 プロトコル (v6.3.0 より前の TiDB など) を使用するデータベースで MySQL Connector/J 8.0.29 を使用すると、特定の条件下でデータベース接続がハングすることがあります。詳細については、 バグレポート参照してください。
回避方法
これは既知の問題です。 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 との互換性
このセクションで説明する互換性情報は、 Sequelize v6.21.4に基づいています。
テスト結果によると、TiDB はほとんどの Sequelize 機能をサポートしています ( MySQL
方言として使用する )。
サポートされていない機能は次のとおりです。
- 外部キー制約 (多対多の関係を含む) はサポートされていません。
GEOMETRY
はサポートされていません。- 整数の主キーの変更はサポートされていません。
PROCEDURE
はサポートされていません。READ-UNCOMMITTED
とSERIALIZABLE
分離レベルはサポートされていません。- デフォルトでは、列の
AUTO_INCREMENT
属性の変更は許可されていません。 FULLTEXT
、HASH
、およびSPATIAL
インデックスはサポートされていません。
整数の主キーの変更はサポートされていません
説明
整数の主キーの変更はサポートされていません。主キーが整数型の場合、TiDB は主キーをデータ編成のインデックスとして使用します。詳細については、 問題 #18090とクラスタ化インデックスを参照してください。
READ-UNCOMMITTED
およびSERIALIZABLE
分離レベルはサポートされていません
説明
TiDB は、 READ-UNCOMMITTED
およびSERIALIZABLE
分離レベルをサポートしていません。分離レベルがREAD-UNCOMMITTED
またはSERIALIZABLE
に設定されている場合、TiDB はエラーをスローします。
回避方法
TiDB がサポートする分離レベルREPEATABLE-READ
またはREAD-COMMITTED
のみを使用してください。
TiDB を、分離レベルSERIALIZABLE
を設定するがSERIALIZABLE
に依存しない他のアプリケーションと互換性を持たせたい場合は、 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
インデックスはサポートされていません。