2014-09-26 48 views
1

我有一个数据库,其中一列是'project_stmt',用于存储文本数据。我已经将数据类型设置为varchar(1000),但有时候使用项目语句的输入文本会像100K字符那样超过很大,在这种情况下数据不会存储到数据库中,因此数据不会存储到数据库中,如何将大文本数据存储在使用mysql和php的id链接的两个表中

一种解决方案是使用BLOB数据类型这种情况下我浪费了很多空间,因为'project_stmt'的用户输入的80%将低于500个字符.....所以我想将'project_stmt'的用户输入文本存储到第二个表中,例如分配数据链接, ,,,我怎么能这样做

CREATE TABLE projects (user_id int(11), 
        project_id int(11) NOT NULL AUTO_INCREMENT, 
        project_title varchar(25) NOT NULL, 
        project_stmt varchar(1000) NOT NULL, 
        PRIMARY KEY (`project_id`), 
        FOREIGN KEY (`user_id`) REFERENCES `user_info` (`user_id`) 
        ); 
+0

创建2个新表,一个用在500个字符的ID和文本字段和另一个表与一个ID和blob这可能看起来不漂亮,但它可能是这种差异的最佳解决方案) – dwana 2014-09-26 09:29:49

+0

为了数据库中的数据规范化,你最好只是在空间上的命中和使用TEXT或BLOB。 – shaunl 2014-09-26 09:39:26

回答

0

创建一个新表。

CREATE TABLE projects_blob (project_blob_id int(11) NOT NULL AUTO_INCREMENT, 
        project_id int(11), 
        project_stmt blob NOT NULL, 
        PRIMARY KEY (`project_blob_id`), 
        FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`) 
        ); 

当插入新的条目,检查project_stmt lenght,如果是> 1000,使BLOB表的插入。 当选择project_stmt使左连接与此表,并代替projects.project_stmt使用

COALESCE(projects_blob.project_stmt, projects.project_stmt) AS project_stmt 

应该做的伎俩

+0

谢谢,它是有帮助的... ... - – rajnish 2014-09-26 12:14:23

0

你可以去数据类型“文本”,因为你不知道项目语句的输入大小。 或者您可以使用“最大”(例如,最大='1000')标签来限制用户在输入字段中。

希望这可以解决您的问题。

+0

谢谢,但它不是正确的方式,因为根据我的要求,从project_stmt用户输入数据可以这么长,所以不能限制它max ='1000' – rajnish 2014-09-26 12:17:33

+0

好吧,可以去作为数据类型的文本,它会解决你的问题 – 2014-09-26 14:16:58

相关问题