(Grailsじゃなくても起こる問題なんだけども)
開発環境時はMyISAMでうまく行っていたのですが、サーバへアップした時にテーブルが作成出来ずにエラーとなりました。
何度やっても特定のテーブルだけが作成されなかったのでMyISAMで作成したDBをダンプアウトしてSQLで流し込んでみたら「Row size too large」だとかなんとか・・・
Google先生に聞いてみたら以下で同様なトラブル事例が
http://forums.mysql.com/read.php?25,33433,33433
Clusterではサイズ指定されたフィールドが 8052バイトを超えるとNGらしいです。
UTF-8では1文字3バイトなのでGrailsのDomain上で、
Stringのフィールドをmapping指定せずに作った場合 varchar(255) で1フィールド辺り768バイト使用されます。
なのでString指定のフィールドを作る場合は極力mappingを指定するようにしましょう。
class Book {
static mapping = {
name type:”text”
}
String name
}
1 件のコメント:
TEXTを使うとデータへのアクセスが2段階になるからちょっと性能落ちるべよ。アルファベットしか使わないカラムをlatin1にしたり、文字数を減らして8KBに収まるように工夫するのもアリだよ。
コメントを投稿