繁体   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