2

重複の可能性:
Grails: 休止状態の方言を変更するときの SQL 構文のエラー

mySQL データベースで Grails を使用しており、データベース エンジンを変更しようとしています。私が調査した限り、これは

 dialect = "org.hibernate.dialect.[MyDialect]" 

DataSource.groovy 構成で。しかし、方言を org.hibernate.dialect.MySQLMyISAMDialect に設定すると、テーブルの作成がエラーで失敗します:

SQL 構文にエラーがあります。1 行目の 'type=MyISAM' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

また、後でテーブルを変更しようとしました:

sql.execute("ALTER TABLE book ENGINE = MYISAM;")

これは実際には機能しますが、作成後にエンジンを変更すると、テーブルのすべての外部キーが削除されます。

エラーを回避し、エンジンを正常に変更するにはどうすればよいですか?

4

1 に答える 1

1

パヴ、

MySQL 5.5.25、Grails 2.1.0、および grails hibernate-2.1.0 プラグインを実行しています。これは、隠れて hibernate-core 3.6.10.FINAL を使用します。

これは、Grails のバージョン (具体的には、Grails が使用している Hibernate の基礎となるバージョン) と MySQL のバージョンに問題がある可能性があります。

Hibernate JIRAで報告されたバグは次のとおりです: HHH-5988

エンジンとして InnoDB を使用しており、次のように MyISAM でスワップしようとしましたDataSource.groovy

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    // dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
    dialect = "org.hibernate.dialect.MySQLMyISAMDialect"
    username = "study"
    password = "********"
}

テーブルの作成時にもエラーが発生しました。

これは、Hibernate JIRA で報告されたバグに対応する、私が取得したエラーの 1 つのサンプルです。

| Error 2012-08-22 13:15:12,739 [pool-4-thread-1] ERROR hbm2ddl.SchemaExport  
- Unsuccessful: create table user (id bigint not null auto_increment, 
version bigint not null, 
login varchar(255) not null unique, 
password varchar(255) not null, 
role varchar(5) not null, 
primary key (id)) type=MyISAM

前述の Hibernate JIRA バグに関するコメントの 1 つは、MySQL 5 MyISAM 用に独自のカスタム方言を作成しているユーザーです。

于 2012-08-22T17:13:27.447 に答える