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

时间:2014-10-30 09:57:01

标签: mysql

我是PHP / MYSQL的新手,我有一个网站,它有多个长格式,并且定期添加更多。来自所有表格的数据存储在“数据”中。 MYSQL表。

我接近存储数据的方式是有200个文本列(因为我的表单长达200个问题)。并非每个问题都需要一个文本列,大约50%只是单个整数或几个单词的答案,但是因为它们按顺序变化,这是我能想到的最简单的方法。

我现在发现我似乎无法在一行中存储10个以上的文本值,因为我收到以下错误:

行大小太大(> 8126)。将某些列更改为TEXTBLOB或使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED可能有所帮助。在当前行格式中,内联存储了{6}字节的BLOB前缀。

我哪里出错了,存储这类数据的最佳方法是什么?我知道有200个专栏似乎很多,而且我已经读到这一点,这必定意味着我没有正确地规范我的数据,但是在这种情况下创建大量的表似乎并不合理,因为所有的数据都是如此在一个级别上连接到它来自的形式。将其拆分为20个数据1-10 11-20 21-30的表格似乎不对吗?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

创建一个表,其中每个字段都是一个单独的行:

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

然后,您可以将此表与Question表联系起来,以获取该问题的所有文本字段。

答案 1 :(得分:0)

在这种情况下你应该考虑NoSQL。你没有固定的架构 考虑使用MongoDB Tutorial

// 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";
}

答案 2 :(得分:0)

您应该将每个问题保存为行,并且每行中都有列名f.e. id_field ...然后你的表将没有200列,但只有几列(取决于你表中的其他列)......