📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

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

注記:

サポートされていない機能セクションには、次のものを含む 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はこれらの変数を保持していません。TiDBとMySQLの違いを確認するには、 SHOW GLOBAL STATUS LIKE 'Com_%'変数を使用してください。

回避方法

これらの変数は使用しないでください。よくあるシナリオの一つは監視です。TiDB TiDB Cloudは監視性に優れているため、サーバーステータス変数からのクエリは必要ありません。TiDB TiDB Cloud監視サービスの詳細については、 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_USEDSERVER_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サポートしていません。5 パラメータResultSet.CONCUR_UPDATABLE指定しないでください。また、 ResultSet内のデータを更新しないでください

回避方法

トランザクションによるデータの一貫性を確保するには、 UPDATEステートメントを使用してデータを更新できます。

MySQL JDBC のバグ

useLocalTransactionStaterewriteBatchedStatementsが同時にtrueの場合、トランザクションはコミットまたはロールバックに失敗します。

説明

MySQL Connector/J 8.0.32 以前のバージョンをご利用の場合、パラメータuseLocalTransactionStaterewriteBatchedStatements同時にtrueに設定すると、トランザクションのコミットに失敗する可能性があります。7 にこのコードすると再現します。

回避方法

注記:

useConfigs=maxPerformanceには一連の設定が含まれています。MySQL Connector/J 8.0 および MySQL Connector/J 5.1 の詳細な設定については、それぞれmysql-コネクタ-j 8.0およびmysql-コネクタ-j 5.1参照してください。 maxPerformance使用する場合はuseLocalTransactionState無効にする必要があります。つまり、 useConfigs=maxPerformance&useLocalTransactionState=false使用してください。

このバグはMySQL Connector/J 8.0.33で修正されました。8.0.xシリーズのアップデートは終了しているため、安定性とパフォーマンスを向上させるためにMySQL Connector/Jを最新の一般提供(GA)バージョンにアップグレードすることを強くお勧めします。

コネクタは 5.7.5 より前のサーバーバージョンとは互換性がありません

説明

MySQL Connector/J 8.0.31 以前のバージョンを、MySQL サーバー 5.7.5 未満、またはMySQL サーバー 5.7.5 未満のプロトコルを使用するデータベース(TiDB v6.3.0 未満など)で使用すると、特定の条件下でデータベース接続がハングすることがあります。詳細については、 バグレポート参照してください。

回避方法

このバグはMySQL Connector/J 8.0.32で修正されました。8.0.xシリーズのアップデートは終了しているため、安定性とパフォーマンスを向上させるためにMySQL Connector/Jを最新の一般提供(GA)バージョンにアップグレードすることを強くお勧めします。

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-UNCOMMITTEDSERIALIZABLE 分離レベルサポートされていません。
  • デフォルトでは、列のAUTO_INCREMENT属性の変更は許可されません。
  • FULLTEXTHASHSPATIALインデックスはサポートされていません。
  • sequelize.queryInterface.showIndex(Model.tableName);はサポートされていません。
  • sequelize.options.databaseVersionはサポートされていません。
  • queryInterface.addColumn使用した外部キー参照の追加はサポートされていません。

整数主キーの変更はサポートされていません

説明

整数型の主キーの変更はサポートされていません。TiDBは、主キーが整数型の場合、データ編成のインデックスとして主キーを使用します。詳細は問題番号 #18090クラスター化インデックス参照してください。

READ-UNCOMMITTEDおよびSERIALIZABLE分離レベルはサポートされていません

説明

TiDBは分離レベルREAD-UNCOMMITTEDSERIALIZABLEサポートしていません。分離レベルがREAD-UNCOMMITTEDまたはSERIALIZABLEに設定されている場合、TiDBはエラーをスローします。

回避方法

TiDB がサポートする分離レベルREPEATABLE-READまたはREAD-COMMITTEDを使用します。

分離レベルSERIALIZABLEを設定しているがSERIALIZABLEに依存しない他のアプリケーションと TiDB の互換性を確保したい場合は、 tidb_skip_isolation_level_check1に設定できます。この場合、TiDB はサポートされていない分離レベルエラーを無視します。

列のAUTO_INCREMENT属性の変更はデフォルトでは許可されていません

説明

デフォルトでは、 ALTER TABLE MODIFYまたはALTER TABLE CHANGEコマンドを使用して列のAUTO_INCREMENTの属性を追加または削除することはできません。

回避方法

AUTO_INCREMENTの制限を参照してください。

AUTO_INCREMENT属性の削除を許可するには、 @@tidb_allow_remove_auto_inctrueに設定します。

FULLTEXTHASHSPATIALインデックスはサポートされていません

説明

FULLTEXTHASHSPATIALインデックスはサポートされていません。

ヘルプが必要ですか?

不和またはスラック 、あるいはサポートチケットを送信するについてコミュニティに質問してください。

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