27

mySQLの専門家からの長いデータ文字列を保存するための最良の方法に関するアドバイスを探しています。

あらゆる種類のデータを格納するために使用される汎用テーブルがあります。つまり、英数字と数値のデータを保持できる必要があります。現在、テーブル構造は単純で、IDと実際のデータが次のように単一の列に格納されています。

id INT(11)
data VARCHAR(128)

現在、大量のデータ(最大500文字)を格納する必要があり、varchar列のサイズを単純に増やすのが最善の方法なのか、それとも新しい列(TEXTタイプの列)を追加する必要があるのか​​疑問に思っています。長い文字列を保存する必要があるときのために。

そこに専門家が何かアドバイスがあれば、私はすべての耳です!私の好みの方法は、varchar列を単純に増やすことですが、それは私が怠惰だからです。私が実行しているmySQLのバージョンは5.0.77です。

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

4

3 に答える 3

33

一般的に言って、これは「正解」の質問ではありません。MySQLには「無限の長さ」のテキストストレージタイプはありません。を使用することもできますLONGTEXTが、それでも(とてつもなく高い)上限があります。しかし、そうすると、50文字のテキストの列のそのばかげたブロブに対処しなければならないためにDBMSを蹴り飛ばしていることになります。あなたがそれでほとんど何もしないという事実は言うまでもありません。

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

これを「アプリケーション設計」レベルで解決したい場合は、これにNoSQL Key-Valueストアを使用します(そして、私はNoSQLに反対しているので、深刻だと思います)。私はそれがそのような小さな変更のためにかなり高価な変更であることを認識していますが。しかし、これがDBMSが最終的に何を保持するかを示している場合は、この同じ問題を将来100回回避するために、今すぐ切り替える方が賢明かもしれません。データドメインはRDBMSで非常に重要ですが、非リレーショナルソリューションでは明示的に除外されています。これは、ここで解決しようとしていることのようです。

MySQLで立ち往生?に増やすだけVARCHAR(1000)です。データの要件がない場合は、とにかく何をするかは関係ありません。

于 2013-03-14T11:31:01.820 に答える
2

テキストを使用する場合は注意してください。TEXTデータはデータベースサーバーのメモリに保存されないため、TEXTデータをクエリするたびに、MySQLはディスクからデータを読み取る必要があります。これは、インデックスを使用できないため、CHARやVARCHARと比較してはるかに低速です。長い文字列を格納するのはnosqlデータベースになります

于 2019-09-04T10:18:57.217 に答える
2

使用できますvarchar(<maximum_limit>)。渡すことができる最大制限は65535バイトです。

注:このVARCHARの最大長は、TEXT/BLOB列と使用される文字セットを除くすべての列で共有されます。

于 2021-03-28T17:40:28.733 に答える