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

时间:2016-06-23 14:12:03

标签: mysql database isbn

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

id, isbn10, isbn13, title, summary

我应该为ISBN10和ISBN13使用哪些数据类型?我首先想到的是一个大整数,但我已经读过一些未经证实的评论,说我应该使用varchar。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

ISBN10

ISBN10 编号虽然称为“数字”,但可能包含字母 X。ISBN 编号中的最后一个数字是一个校验位,范围从 0 到 10,而 10 表示为 X。另外,它们可能以字母开头double 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。