簡體   English   中英

MYSQL-在一行中存儲大量文本字段

[英]MYSQL - Storing lots of text fields in a single row

我是PHP / MYSQL的新手,我的網站有多種長格式,並且會定期添加更多形式。 來自所有表單的數據都存儲在“數據” MYSQL表中。

我存儲數據的方法是擁有200個文本列(因為我的表單最多包含200個問題)。 並非每個問題都需要一個文本列,大約50%只是單個整數或幾個單詞的答案,但是由於順序不同,這是我想出的最簡單的方法。

現在,我發現我似乎無法在一行中存儲10個以上的文本值,因為出現以下錯誤:

行大小太大(> 8126)。 將某些列更改為TEXTBLOB或使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED可能會有所幫助。 在當前行格式中,內聯存儲768個字節的BLOB前綴。

我要去哪里錯了?存儲這種數據的最佳方法是什么? 我知道200列似乎很多,我已經讀過這必須表示我沒有正確規范化我的數據,但是在這種情況下創建大量表似乎並不明智,因為所有數據都連接在單個級別上到它來自的形式。 用數據1-10 11-20 21-30其拆分為20個表似乎並不對嗎?

任何幫助將非常感激。

創建一個表,其中每個字段都是單獨的行:

CREATE TABLE Question_Fields (
    question_id INT, -- FK to Question table
    field_num INT,
    field_value VARCHAR(1024)
);

然后,您可以將此表與Question表結合起來,以獲取該Question所有文本字段。

在這種情況下,您應該考慮使用NoSQL。 您沒有固定的架構。
考慮使用MongoDB 教程

// connect
$m = new MongoClient();

// select a database
$db = $m->comedy;

// select a collection (analogous to a relational database's table)
$collection = $db->cartoons;

// add a record
$document = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($document);

// add another record, with a different "shape"
$document = array( "title" => "XKCD", "online" => true );
$collection->insert($document);

// find everything in the collection
$cursor = $collection->find();

// iterate through the results
foreach ($cursor as $document) {
    echo $document["title"] . "\n";
}

您應該將每個問題另存為行,並且在每行中都有列名fe id_field ...這樣,您的表就不會有200列,而只有兩列(取決於表中的其他列)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM