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

12
为了我目前正在构建的应用程序,我需要一个数据库来存储图书。图书表的模式应包含以下属性:
id,isbn10,isbn13,title,summary
ISBN10和ISBN13应该使用什么数据类型?我的第一个想法是使用biginteger,但我读到了一些毫无根据的评论,说我应该使用varchar。

数据将如何使用?- 如果您不打算对其进行数学运算,则将数据存储为VARCHAR或类似格式是没有问题的。 - Martin
2
不能使用int,因为它只能覆盖ISBN可能的约20%(0-> 20亿与0-> 100亿) - Marc B
我只使用ISBN号码在数据库中搜索/查询书籍。 - kipzes
2个回答

19
你需要一个CHAR/VARCHAR类型(因为长度已知,所以CHAR可能是最好的选择——10和13个字符)。像INTEGER这样的数字类型会从ISBN中删除前导零,例如0-684-84328-5

1
您还需要在将其插入数据库之前去除连字符和空格,以便它适合10或13个字符,并使搜索/查询更容易。 - dsamarin

4

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)是控制数字。如果我们去掉连字符,就会混淆出版商和书籍编号。这真的很重要吗?这取决于您对该数字的使用方式。图书研究人员(我曾经处于这种情况)可能需要它,原因有很多,在这里我不会详细解释,因为它与存储数据无关。我建议不要去掉连字符,但事实上每个人都这样做。

ISBN13

ISBN13面临着与意义相关的相同问题,即使用连字符可以得到4个有意义的数据块,如果没有连字符,则语言、出版商和书籍编号将丢失。

然而,控制数字只会是0-9,不会包含字母。但是,如果您感到诱惑只存储ISBN13号码(因为ISBN10可以自动且无误地升级到ISBN13),并在此事项上使用int,则将来可能会遇到一些问题。所有ISBN13号码都以978或979开头,但未来可能会添加一些078。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接