MySQL 数据集中 ISBN10 和 ISBN13 的最佳数据类型是什么

What is the best data type for ISBN10 and ISBN13 in a MySQL datase

对于我目前正在构建的应用程序,我需要一个数据库来存储书籍。书籍的架构 table 应包含以下属性:

id, isbn10, isbn13, title, summary

我应该为 ISBN10 和 ISBN13 使用什么数据类型?我的第一个想法是 biginteger,但我读过一些未经证实的评论说我应该使用 varchar。

您需要 CHAR/VARCHARCHAR 可能是最佳选择,因为您知道长度 - 10 和 13 个字符)。 INTEGER 等数字类型将删除 ISBN 中的前导零,例如 0-684-84328-5.

ISBN 编号应存储为字符串,例如 varchar(17)

ISBN13 需要 17 个字符,13 个数字加连字符,ISBN10 需要 13 个字符,10 个数字加连字符。

ISBN10

ISBN10 编号虽然称为“编号”,但可能包含字母 X。ISBN 编号中的最后一个数字是校验位,范围为 0-10,10 表示为 X。另外,它们可能以字母开头使用双 0,例如 0062472100,并且作为数字格式,它可能会在存储后删除前导 00

84-7844-453-X 是有效的 ISBN10 编号,其中 84 表示西班牙,7844 是出版商编号,453 是书号,X(即 10)是控制位。如果我们删除连字符,我们会将出版商与图书 ID 混合在一起。真的很重要吗?根据您将赋予该号码的用途。书目研究人员(我发现自己处于那种情况)可能出于多种原因需要它,我不会在这里讨论,因为它与存储数据无关。我建议不要删除连字符,但事实是每个人都这样做。

ISBN13

ISBN13 在意义方面面临着同样的问题,因为有了连字符,您会得到 4 块有意义的数据,没有它们,语言、出版商和图书 ID 就会丢失。

不过,控制位只会是0-9,不会有字母。但是,如果您只想存储 isbn13 编号(因为 ISBN10 可以自动且无误地升级到 ISBN13),并为此使用 int,您将来可能会 运行 遇到一些问题。所有 ISBN13 编号都以 978 或 979 开头,但将来可能会添加一些 078。