2011-11-10 17 views
2

私は国際的なウェブサイトを開発する必要があります。記事と呼ばれる表があるとしましょう:1行にTEXTフィールドの制限がありますか?

1行にはテキストの各バージョンの翻訳が含まれています。各言語の各テキストフィールドが約1500文字であることを考慮すると、mysqlがそのようなテーブルを管理する上で問題はありますか?

一度にどれくらいのスペースが単一の行を取ることができるか厳しい制限があると聞いたことがあります。

+2

別の言語を追加する必要がある場合はどうなりますか?あなたはテーブルを変える? –

+0

はい..この方法では、レコードごとに1つの言語を含むテーブルを持つJOINよりも簡単なクエリを使用できます –

+0

このようなアプリケーションを設計するには、悪いアプローチです。 –

答えて

1

は、MySQLの行サイズの制限(InnoDBはIIRCのための8Kの周りのMyISAMのための64Kは、)確かにありますが、あなたはTEXTBLOBフィールドを使用している場合にはあまり重要ではないでしょう。

このようなフィールドは実際にはポインタであり、データ自体は行の外側に格納されます。各TEXTフィールドは、storage requirementsに従って、9〜12バイトの行スペースしか取らない。

つまり、記事の翻訳は列の代わりに行内に格納する方がよいでしょう。

+0

私の場合、完璧なので、私はどんな限界にも直面しませんか? – dynamic

+1

5つの 'text_XX'フィールドは最大60バイトの行ストレージを使用するので、おそらくそうではありません。 –

0

行の長さの制限を記述するのは複雑です。詳細については、このブログを参照してください:Blob Storage in InnoDB

しかし、そのような列にテキストを保存しないことを強くお勧めします。代わりに、行のストア:

CREATE TABLE Article (
    articeID INT NOT NULL AUTO_INCREMENT, 
    language CHAR(2) NOT NULL, 
    article_text TEXT, 
    PRIMARY KEY (articleID, language) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

この特定のテーブルは私のために働くことができません。なぜなら、私は他のフィールドを言語から無差別に保存する必要があり、これが冗長性を引き起こすからです。スキーマを正規化したい場合は、翻訳されたテキストのみを含む2番目のテーブルを作成する必要がありますが、これにより複雑なクエリが発生し、クエリを可能な限り単純にしたいと考えています。 – dynamic

関連する問題