如何在 MySQL 数据库中存储版本号
Posted
技术标签:
【中文标题】如何在 MySQL 数据库中存储版本号【英文标题】:How to store version number in MySQL database 【发布时间】:2014-04-13 07:15:50 【问题描述】:我想将我的应用程序的版本号存储在 mysql 数据库中,例如:
version
1.1.0
1.1.1
1.1.2
我应该使用哪种数据类型。
【问题讨论】:
你可以使用varchar
但是如果将来我想对这些数据进行排序,那将是不可能的
为什么不能排序,加个索引就可以正常排序了?
因为版本号总是从左边的major 到右边的minor 排序,所以排序就好了。唯一的建议是将后缀(alpha、beta、RC 等)和稳定标志存储在单独的字段中。
【参考方案1】:
你有两个选择:
使用 varchar
使用三个数字字段,Major、Minor、Patch
同时使用。
每个选项都有其优点和缺点。
选项1只有一个字段,所以很容易得到版本。但它不一定是可排序的,因为 2.0.0 在字典上会高于 10.0.0。
选项 2 很容易排序,但您必须获得三个字段。
选项3可以使用视图来实现:
Table tversion (
major NUMBER(3),
minor NUMBER(3),
patch NUMBER(3)
)
View vversion is
select major || '.' || minor || '.' || patch AS version,
major * 1000000 + minor * 1000 + patch AS sortorder from tversion;
【讨论】:
选项 2 易于排序?选择版本 好吧,它不会太复杂:(major = 10 and minor @JeromeJaglale 如果您添加选项 3 建议的视图,您可以这样做:vversion.sortorder < 1004002
好的,谢谢。我们可以将“优化”版本号直接存储在表中,但我认为视图使其更易于维护。
@JeromeJaglale 这也是我的想法。【参考方案2】:
您可以使用varchar()
,甚至可以使用INET_NTOA
。试试这个LINK
【讨论】:
NTOA 会不会将他的版本部分限制为仅 1-255?【参考方案3】:或者,为什么不直接使用数字?例如:
210061
那就是 21.0.6 Beta 1
我就是这样做的。
但原则是将版本号的多个部分以这样一种方式进行叠加,最终得到版本的整数表示并存储它。
这些数字自然是可排序的。
查看结果时,您可以将其分解为数字所代表的含义。
【讨论】:
【参考方案4】:我认为对每个部分(主要、次要、修订和构建)使用整数列是最好的解决方案。但是由于某种原因,如果您必须使用一个 varchar 列,那么您可以这样做;
将版本数据1.3.5.79格式化成这样001.003.005.00079
这样比较和排序的问题就解决了。
【讨论】:
【参考方案5】:在存储不同版本号的同时使用VARCHAR
总是更好。
【讨论】:
如果你只想显示版本号就可以了。如果您想按版本号订购,则需要另寻解决方案。以上是关于如何在 MySQL 数据库中存储版本号的主要内容,如果未能解决你的问题,请参考以下文章