我在mySQL数据库中使用Grails,并试图更改数据库引擎。据我研究,这件事可以用最好的方法
dialect = "org.hibernate.dialect.[MyDialect]" 在DataSource.groovy配置中。但是,当我将方言设置为org.hibernate.dialect.MySQLMyISAMDialect时,创建表失败了:
您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行“type=MyISAM”附近使用的正确语法。
后来,我还试图用以下方法更改该表:
sql.execute("ALTER TABLE book ENGINE = MYISAM;")这实际上是可行的,但是在创建之后更改引擎时,所有外键都会被删除。
我应该如何避免错误和改变发动机正常?
发布于 2012-08-22 17:04:51
你为什么要使用MyISAM??它不支持外键或事务。而且它很少比InnoDB更快,因为InnoDB使用行锁和MVCC,而不是MyISAM的全表锁。
话虽如此,你还是可以让它发挥作用的。您必须使用较新版本的MySQL,因为type属性已经过时一段时间了,现在不受支持了--您必须使用ENGINE。没有方言支持这一点(请注意,org.hibernate.dialect.MySQL5InnoDBDialect为InnoDB做了正确的事情),所以您需要创建自己的方言。
在src/groovy或src/java中创建该类(更改包和/或类名):
package com.mycompany.myapp
import org.hibernate.dialect.MySQLMyISAMDialect
class MySQL5MyISAMDialect extends MySQLMyISAMDialect {
String getTableTypeString() {
" ENGINE=MyISAM"
}
}并在DataSource.groovy中引用,如您在问题中所示:
dialect = com.mycompany.myapp.MySQL5MyISAMDialecthttps://stackoverflow.com/questions/12077148
复制相似问题