重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

DriverまたはORMを選択します

TiDBはMySQLプロトコルとの互換性が高いですが、一部の機能はMySQLと互換性がありません。

例えば:

  • TiDBでサポートされていない機能:

    • ストアドプロシージャと関数
    • トリガー
    • FOREIGN KEY制約
  • MySQLとは異なる機能:

    • 自動インクリメントID:自動インクリメント列はTiDBでグローバルに一意です。これらは単一のTiDBサーバーでは増分ですが、必ずしも複数のTiDBサーバー間で増分したり、順番に割り当てたりする必要はありません

互換性の違いの完全なリストについては、 MySQLの互換性を参照してください。

Java

TiDBは、Javaに対して次の2つのサポートレベルを提供します。

  • フル:このドライバーまたはORMの使用に既知の問題がないことを示します。
  • 確認済み:TiDBとMySQLの互換性の違いにより、このドライバーまたはORMを使用するとエラーが発生する可能性があることを示します。

Javaドライバー

JDBC

サポートレベル:フル

MySQLドキュメントに従って、JavaJDBCドライバーをダウンロードして構成できます。

ノート:

JDBC5.1の最新バージョンであるバージョン5.1.49を使用することを強くお勧めします。現在のバージョン8.0.29には未解決のバグがあるため、TiDBの使用時にスレッドがハングする可能性があります。 MySQL JDBC 8.0がこの修正をマージするまで、バージョン8.0にアップグレードしないことをお勧めします。

完全なアプリケーションを構築する方法の例については、 TiDBとJDBCを使用してシンプルなCRUDアプリを構築するを参照してください。

JavaORMフレームワーク

Hibernate

サポートレベル: Full

ノート:

現在、Hibernateはネストされたトランザクションをサポートしていませんを実行し、TiDBはセーブポイントをサポートしていませんを実行します。 Spring Data JPAなどのフレームワークを使用している場合は、 @TransactionalPropagation.NESTEDトランザクション伝播オプションを使用しないでください。つまり、 @Transactional( propagation = Propagation.NESTED)を設定しないでください。

この例を使用すると、セーブポイント用のTiDBとMySQLの出力をすばやく再現できます。

MySQL:
id: 1, coins: 1, goods: 1
id: 3, coins: 1, goods: 1

TiDB:

2022/04/02 13:59:48 /<path>/go/pkg/mod/gorm.io/driver/mysql@v1.3.2/mysql.go:397 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 9 near "SAVEPOINT sp0x102cf8960"
[1.119ms] [rows:0] SAVEPOINT sp0x102cf8960

2022/04/02 13:59:48 /<path>/go/pkg/mod/gorm.io/driver/mysql@v1.3.2/mysql.go:397 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 9 near "SAVEPOINT sp0x102cf8960"
[0.001ms] [rows:0] SAVEPOINT sp0x102cf8a00
id: 1, coins: 1, goods: 1

アプリケーションのさまざまな依存関係間の複雑な関係を手動で管理することを回避するために、 GradleまたはMavenを使用して、間接的な依存関係を含む、アプリケーションのすべての依存関係を取得できます。 6.0.0.Beta2ダイアレクトをサポートしているのはHibernate5以降のみであることに注意してください。

Mavenを使用している場合は、 <dependencies></dependencies>に以下を追加します。

<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.0.0.CR2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

Gradleを使用している場合は、 dependenciesに以下を追加します。

implementation 'org.hibernate:hibernate-core:6.0.0.CR2'
implementation 'mysql:mysql-connector-java:5.1.49'

さらに、 Hibernate構成ファイルorg.hibernate.dialect.TiDBDialectでTiDBダイアレクトを指定する必要があります。これは、Hibernate5以降でのみサポートされて6.0.0.Beta2ます。 Hibernateバージョンが6.0.0.Beta2より前の場合は、最初にアップグレードしてください。

ノート:

Hibernateバージョンをアップグレードできない場合は、代わりにMySQL 5.7ダイアレクトorg.hibernate.dialect.MySQL57Dialectを使用してください。ただし、この設定により、予期しない結果が発生したり、 シーケンスなどのTiDB固有の機能が失われたりする可能性があります。