0

データベーステーブル内に未知の量のデータを保存する必要があるとしましょう。データの取得に時間がかかるため、余分なテーブルを作成したくありません。データの量は異なる場合があります。

私の最初の考えは、データをkey1=value1;key2=value2;key3=value3形式で保存することでしたが、ここでの問題は、一部の値が;その本体に含まれる可能性があることです。この場合の最良のセパレータは何ですか? さまざまなデータを 1 つの行に格納できるようにするために、他にどのような方法を使用できますか?

行の内容の例はdata=2012-05-14 20:07:45;text=This is a comment, but what if I contain a semicolon?;last_id=123456、セパレーターで行テキストを正しく分解した後、対応するキーと値を持つ配列を PHP から取得できるようなものです。

4

3 に答える 3

2

まず第一に、1 つのフィールドだけに複数の情報を保存することは決してありません。それらに個別にアクセスする必要がある場合や、それらの 1 つで検索する必要がある場合です。これは、ここで何度も議論されてきました。

一度にすべての情報の完全なコレクションにアクセスしたいと仮定すると、開発環境のネイティブ シリアル化形式を使用することをお勧めします。たとえば、PHP の場合は、serialze().

クロスプラットフォームの場合は、JSON が適している可能性があります。すべての環境に対応する優れた JSON エンコーディング/デコーディング ライブラリが存在します。同じことが XML にも当てはまりますが、彼のコンテキストでは、XML のテキストのオーバーヘッドが少し影響します。

余談ですが、追加のテーブルにデータを保存すると遅くなりますか? 最終的に決定する前に、それをベンチマークすることをお勧めします。

編集:

読んだ後、PHPを使用していること:テーブルに入れたくない場合は、serialize()/unserialize()MEDIUMTEXTフィールドに固執してください。これは完全に機能します。私はいつもそうしています。

于 2012-05-14T15:52:45.260 に答える
1

EAV ( cringe ) はおそらく、必要に応じて任意の値を保存するための最良の方法ですが、何らかの理由で追加のテーブルに固く反対しているようです。それを踏まえると、json_encode の結果をテーブルに保存するだけで済みます。読み返すときは、json_decode だけで配列に戻します。

このフィールドで何かを検索する必要がある場合は、SQL LIKE を使用する必要があることに注意してください。このフィールドを検索したり、何かに結合したりする必要がない場合は問題ないと思いますが、そうすると、パフォーマンスを完全に無視したことになります。

于 2012-05-14T16:17:01.173 に答える
-1

it can be the quotes who separate them .

key1='value1';key2='value2';key3='value3' 

if not like that , give your sql example and we can see how to do it.

于 2012-05-14T15:54:19.750 に答える