サードパーティ製ツールとの既知の非互換性の問題

ノート:

サポートされていない機能番目のセクションには、次のような 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 はエラー メッセージでTIMESTAMPDATETIMEを区別します

説明

TiDB のエラー メッセージではTIMESTAMPDATETIMEが区別されますが、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 の照合順序はクライアント側に保存され、サーバーのバージョンによって区別されます。

次の表に、文字セットにおける既知のクライアント側とサーバー側の照合順序順序の不一致を示します。

キャラクタークライアント側のデフォルトの照合順序サーバー側のデフォルトの照合順序
asciiascii_general_ciascii_bin
latin1latin1_swedish_cilatin1_bin
utf8mb4utf8mb4_0900_ai_ciutf8mb4_bin

回避方法

照合順序を手動で設定し、クライアント側のデフォルトの照合順序に依存しないでください。クライアント側のデフォルトの照合順序は、 MySQL Connector/J 構成ファイルによって保存されます。

NO_BACKSLASH_ESCAPESパラメータが有効にならない

説明

TiDB では、 \文字をエスケープせずにNO_BACKSLASH_ESCAPESパラメーターを使用することはできません。詳細については、この問題を追跡してください。

回避方法

TiDB ではNO_BACKSLASH_ESCAPES\使用しないでください。ただし、SQL ステートメントでは\\使用してください。

説明

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 のバグ

useLocalTransactionStaterewriteBatchedStatementsが同時に 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-UNCOMMITTEDSERIALIZABLE 分離レベルはサポートされていません。
  • デフォルトでは、列のAUTO_INCREMENT属性の変更は許可されていません。
  • FULLTEXTHASH 、および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_inctrueに設定します。

FULLTEXTHASH 、およびSPATIALインデックスはサポートされていません

説明

FULLTEXTHASH 、およびSPATIALインデックスはサポートされていません。

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