首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails:更改hibernate方言时SQL语法中的错误

问Grails:更改hibernate方言时SQL语法中的错误
EN

Stack Overflow用户
提问于 2012-08-22 16:06:26
回答 1查看 1.3K关注 0票数 2

我在mySQL数据库中使用Grails,并试图更改数据库引擎。据我研究,这件事可以用最好的方法

代码语言:javascript
复制
 dialect = "org.hibernate.dialect.[MyDialect]" 

在DataSource.groovy配置中。但是,当我将方言设置为org.hibernate.dialect.MySQLMyISAMDialect时,创建表失败了:

您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行“type=MyISAM”附近使用的正确语法。

后来,我还试图用以下方法更改该表:

代码语言:javascript
复制
sql.execute("ALTER TABLE book ENGINE = MYISAM;")

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

我应该如何避免错误和改变发动机正常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-22 17:04:51

你为什么要使用MyISAM??它不支持外键或事务。而且它很少比InnoDB更快,因为InnoDB使用行锁和MVCC,而不是MyISAM的全表锁。

话虽如此,你还是可以让它发挥作用的。您必须使用较新版本的MySQL,因为type属性已经过时一段时间了,现在不受支持了--您必须使用ENGINE。没有方言支持这一点(请注意,org.hibernate.dialect.MySQL5InnoDBDialect为InnoDB做了正确的事情),所以您需要创建自己的方言。

在src/groovy或src/java中创建该类(更改包和/或类名):

代码语言:javascript
复制
package com.mycompany.myapp

import org.hibernate.dialect.MySQLMyISAMDialect

class MySQL5MyISAMDialect extends MySQLMyISAMDialect {
   String getTableTypeString() {
      " ENGINE=MyISAM"
   }
}

并在DataSource.groovy中引用,如您在问题中所示:

代码语言:javascript
复制
dialect = com.mycompany.myapp.MySQL5MyISAMDialect
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12077148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档