数据库字段长度用于存储未知和技术上无限长度的数据?

时间:2017-09-07 15:38:58

标签: mysql database database-design doi

我必须将DOI存储在MySQL数据库中。 handbook说:

  

DOI名称的长度没有限制。

到目前为止,我当前数据中DOI的最大长度为78个字符。为了不浪费存储空间和安全,您会建议使用哪个字段长度?一般来说:

考虑到空间和交易效率,您如何处理不知道必须存储在数据库中的输入数据的最大长度的问题?

修改

这两个(简化)表documenttopic具有一对多关系:     

CREATE TABLE document
(
  ID int(11) NOT NULL,
  DOI ??? NOT NULL,
  PRIMARY KEY (ID) 
);

CREATE TABLE topic
(
  ID int(11) NOT NULL,
  DocID int(11) NOT NULL,
  Name varchar(255) NOT NULL,
  PRIMARY KEY (ID),
  FOREIGN KEY (DocID) REFERENCES Document(ID), UNIQUE(DocID)
);

我必须对统计信息运行以下(简化)查询,返回每个文档引用的主题类别的总值(如果有任何引用):     

SELECT COUNT(topic.Name) AS number, document.DOI
FROM document LEFT OUTER JOIN topic
ON document.ID = topic.DocID
GROUP BY document.DOI;

使用的字符集是utf_8_general_ci

2 个答案:

答案 0 :(得分:2)

TEXTVARCHAR可以存储64KB。如果你是一个额外的偏执狂,使用允许4GB的LONGTEXT,但如果名称实际上超过64KB,那么这是一个非常滥用的标准。 VARCHAR(65535)可能是一个合理的住所。

由于VARCHAR 可变长度,因此您实际上只会在使用时支付额外的存储费用。限制只是限制在理论上可以将多少数据放入现场。

答案 1 :(得分:1)

空间不是问题;索引可能是一个问题。请提供需要此列索引的查询。还提供所需的CHARACTER SET。有了这些,我们可以讨论各种截止的分支:191,255,767,3072等。