2013-03-14 13 views
15

私は、mySQLの専門家から長いデータ文字列を格納する最良の方法についていくつかのアドバイスを探しています。長い文字列を格納するMySQLの最良の方法

私は、あらゆる種類のデータを格納するために使用される汎用テーブルを持っています。これは、英数字および数値データを保持できることを意味します。

id INT(11) 
data VARCHAR(128) 

今(500文字まで)より大量のデータを格納するための要件を有しており、午前次のよう 現在、テーブル構造は、単一の列に格納されたIDと実際のデータと簡単です最善の方法は単純にvarcharの列のサイズを増やすかどうか、私は長い列を格納する必要がある時間の新しい列(TEXT型の列?)を追加する必要があるかどうか疑問に思っています。

私の耳には何かアドバイスがありますか? 私の好みの方法は単純にvarcharカラムを増やすことですが、それは私が怠け者だからです。 実行しているmySQLのバージョンは5.0.77です。

新しい500文字の要件は、奇数レコードのみに適用されます。テーブル内のほとんどのレコードは50文字以下になります。 私は、列128を作成することで将来的に守ると思っていました。私がどれだけ知っていたかを表示します!

+1

longtextデータ型を使用してください。 – Dhinakar

+0

達成したいことは何ですか? – sectus

+0

このデータを使って何をしようとしているのかを知ることは本当に重要ですが、とにかくクエリを使って操作するのですか、 – Steve

答えて

18

一般的に言えば、これは「正しい」答えがある質問ではありません。 MySQLには、無限の長さのテキスト格納タイプはありません。 LONGTEXTを使用することはできますが、それでも(上限が不当に高い)上限があります。しかし、あなたがそうした場合、50文字のテキストのその不条理な塊に対処しなければならないため、あなたのDBMSを歯に蹴っています。あなたはそれで何かをすることはほとんどありません。

したがって、ほとんどのfutureproofproof(TM)はおそらくLONGTEXTで提供されています。しかし、それはまた、問題を解決する非常に悪い方法です。正直、私はアプリケーションの要件を再訪したいと思います。 「ドメイン」(アプリケーション内で明確に定義されている)と任意の長さを持たない文字列を格納することは、RDBMSの強みの1つではありません。

これを「アプリケーション設計」レベルで解決したい場合は、NoSQLのKey-Valueストアを使用します(これはNoSQLの誇大宣伝として使用されているので、このようなマイナーチェンジにはかなり費用がかかります。しかし、これがあなたのDBMSが最終的に成立することを示すものであれば、将来この同じ問題を100回も避けるために今切り替えるほうが賢明かもしれません。データ・ドメインはRDBMSでは非常に重要ですが、ここで解決しようとしているような非リレーショナル・ソリューションでは明示的に脇見されています。

MySQLにはまっていますか?単にそれをVARCHAR(1000)に増やしてください。データの要件がない場合は、とにかく行うこととは関係ありません。

+0

ちょうど500文字であれば、 'TEXT'はうまく動作します。 –

+1

'TEXT'は両方とも"唯一の "500文字に使用するのが重く、OPが500が上限であるかどうかは分かりません。答えは、MyISAMかInnoDBのどちらを使用しているかによって異なりますが、テキストがすぐにアクセスできるカラムの場合、データがインラインで格納されるため、 'VARCHAR'が速くなります(InnoDBは' TEXT'を行長制限、 16)。したがって、アプリケーションに依存しますが、 'TEXT'はカラムの長さに安定した上限を置くことができない場合にのみ常により良い方法です。 – Naltharial

+0

合意、@ Naltharial。ちょうど 'LONGTEXT 'の提案が' TEXT'の唯一の参考文献ではないことを確実にしたいと思った.LONGTEXTではなくTEXTがOPの解決の可能性の方がはるかに多いだろう。うまくいけば要件を強化する。 –

関連する問題