Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Grails:更改hibernate方言时SQL语法出错_Mysql_Grails - Fatal编程技术网

Mysql Grails:更改hibernate方言时SQL语法出错

Mysql Grails:更改hibernate方言时SQL语法出错,mysql,grails,Mysql,Grails,我将Grails与mySQL数据库一起使用,并尝试更改数据库引擎。就我所研究的而言,这可以用 dialect = "org.hibernate.dialect.[MyDialect]" 在DataSource.groovy配置中。但当我将方言设置为org.hibernate.dial.MySQLMyISAMDialect时,创建我的表失败,出现错误: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行“类型=MyISAM”附近 我后来还尝试用以下方法

我将Grails与mySQL数据库一起使用,并尝试更改数据库引擎。就我所研究的而言,这可以用

 dialect = "org.hibernate.dialect.[MyDialect]" 
在DataSource.groovy配置中。但当我将方言设置为org.hibernate.dial.MySQLMyISAMDialect时,创建我的表失败,出现错误:

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

我后来还尝试用以下方法更改表格:

sql.execute("ALTER TABLE book ENGINE = MYISAM;")
这实际上是可行的,但是在创建之后更改引擎时,表的所有外键都会被删除


如何避免错误并正常更改引擎?

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

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

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

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

dialect = com.mycompany.myapp.MySQL5MyISAMDialect

您可以发布您正在运行的MySQL版本,以及Grails版本吗?仅供参考,MYISAM不支持外键。MySQL版本的可能副本是5.5.27,Grails版本是2.1.0。非常感谢!它正在重写该方法。我想使用MyISAM的全文搜索功能,我现在不需要交易和外键支持。
dialect = com.mycompany.myapp.MySQL5MyISAMDialect