Mysql
 sql >> база данни >  >> RDS >> Mysql

Grails:грешка в синтаксиса на SQL при промяна на диалекта на хибернация

Защо бихте искали да използвате 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.MySQL5MyISAMDialect



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намерите редове, които имат стойност, която съдържа малка буква

  2. Как мога да потисна изхода на заглавката на колона за един SQL израз?

  3. Записване на Python Pickled обекти в MySQL db

  4. Как да заредя предварително таблици в INNODB буферен пул с MySQL?

  5. Как мога да използвам DATE() в Doctrine 2 DQL?