2008年6月28日土曜日

ジーン・オントロジーとMySQL

久々にジーン・オントロジーのデータベースを取ってきた。

ジーン・オントロジー(Gene Ontology : GO)とは,遺伝子や遺伝子産物についての用語を共通化しようとするプロジェクトである。
前の職場にいたころは,そのプロジェクトの中心人物と直接話をする機会もあったのだが,今の職場ではそれほど関わらなくなっていた。あれこれ考えてやはり手元にGOデータベースがあった方が何かと都合が良いかなと,データベースを持ってきたのだ。

GOのサイトでは,MySQL dumpの形式でデータが置いてある。MySQLに流し込めばそのままデータベースができあがるようになっていてとてもありがたい。




MySQLにGO用にデータベースを作成(CREATE DATABASE)してとってきたファイルを食わせる。

と...

ERROR 1071 (42000) at line 747: Specified key was too long; max key length is 1000 bytes

う゛,エラーだ。

エラー箇所の747行目を見るとCREATE TABLE でテーブルを作成している箇所でKEYを定義している。

int(11)が1つとvarchar(255)を2つとvarchar(55)をひとまとめにKEYにしている。普通にそのまま合計しても1000バイトにはならないように見える。

CREATE DATABASEをするときにいつものようにcharacter setをUTF-8にしたのがいけなかったのか?
どうやらvarcharでは、1文字分を3バイトとカウントしているようだ。

UTF-8では、文字によって1バイト~4バイトあるが、漢字などのマルチバイト文字の多くは3バイトなので1文字を3バイトと計算しているのだろう。

データベースをascii_general_ciを指定して作成し直して,先ほどエラーを出したファイルを食わせなおすと今度は無事に登録できた。

データベースに限らず,海外で開発されたソフトは特に,文字列長というのは実際はバイト数だろうとつい思ってしまっていたが,最近のソフトは,マルチバイトの文字を考慮したものになっているのだなぁと改めて気がついた。
場合によってはそのために不都合が生じる事もあるのだ。

0 件のコメント:

コメントを投稿