0

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

DOI 号的长度没有限制。

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

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

编辑

有这两个(简化的)表document,并且topic具有一对多的关系:

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.

4

2 回答 2

2

TEXT并且VARCHAR可以存储64KB。如果您过于偏执,请使用LONGTEXT允许 4GB 的空间,但如果名称实际上超过 64KB,那么这是一个非常滥用的标准。VARCHAR(65535)可能是一个合理的住宿。

由于VARCHAR可变长度,因此您实际上只需在使用时支付额外的存储空间。从理论上讲,限制只是限制了可以在现场放置多少数据。

于 2017-09-07T17:28:57.233 回答
1

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

于 2017-09-08T03:50:30.330 回答