Grails:使用MYISAM方言时SQL语法错误

时间:2012-08-22 15:30:44

标签: mysql hibernate grails

  

可能重复:
  Grails: error in SQL syntax when changing the hibernate dialect

我正在使用Grails和mySQL数据库,我正在尝试更改数据库引擎。据我所研究,这可以用

做得最好
 dialect = "org.hibernate.dialect.[MyDialect]" 
DataSource.groovy配置中的

。但是当我将方言设置为org.hibernate.dialect.MySQLMyISAMDialect时,我的表的创建失败并显示错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在第1行'type = MyISAM'附近

我还试图稍后改变表:

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

这实际上有效,但在创建后更改引擎时,所有外键都会被删除。

我应该如何避免错误并正常更换发动机?

1 个答案:

答案 0 :(得分:1)

pav,

我正在运行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作为我的引擎,我尝试在My DataSource.groovy中按照以下方式交换MyISAM:

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

我也在创建表时遇到错误。

以下是我得到的一个错误的示例,它对应于Hibernate JIRA上报告的错误:

| 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错误的评论之一是创建自己的custom dialect for MySQL 5 MyISAM的用户。