对于我目前正在构建的应用程序,我需要一个用于存储书籍的数据库。 books表的模式应包含以下属性:
id, isbn10, isbn13, title, summary
我应该为ISBN10和ISBN13使用哪些数据类型?我首先想到的是一个大整数,但我已经读过一些未经证实的评论,说我应该使用varchar。
答案 0 :(得分:4)
您需要CHAR
/ VARCHAR
(CHAR
可能是最佳选择,因为您知道长度 - 10和13个字符)。像INTEGER
这样的数字类型会删除像0-684-84328-5
这样的ISBN中的前导零。
答案 1 :(得分:2)
ISBN 编号应存储为字符串,例如 varchar(17)
。
ISBN13 需要 17 个字符,13 个数字加连字符,ISBN10 需要 13 个字符,10 个数字加连字符。
ISBN10 编号虽然称为“数字”,但可能包含字母 X。ISBN 编号中的最后一个数字是一个校验位,范围从 0 到 10,而 10 表示为 X。另外,它们可能以字母开头double 0
,例如 0062472100
,作为数字格式,一旦存储,它可能会删除前导 00
。
84-7844-453-X 是有效的 ISBN10 编号,其中 84 表示西班牙,7844 是出版商编号,453 是书号,X(即 10)是控制数字。如果我们删除连字符,我们会将出版商与图书 ID 混合在一起。真的很重要吗?根据用途,你会给那个号码。书目研究人员(我发现自己处于那种情况)可能出于多种原因需要它,我不会在这里介绍,因为它与存储数据无关。我建议不要删除连字符,但事实是每个人都这样做。
ISBN13 在意义方面面临同样的问题,因为使用连字符,您可以获得 4 块有意义的数据,如果没有它们,语言、出版商和图书 ID 就会丢失。
尽管如此,控制数字只会是 0-9,永远不会有字母。但是,如果您想只存储 isbn13 数字(因为 ISBN10 可以自动且无故障地升级到 ISBN13),并为此使用 int
,那么您将来可能会遇到一些问题。所有 ISBN13 编号都以 978 或 979 开头,但将来可能会添加一些 078。