我需要在 mysql 字段中存储分数,但这个分数可以是时间、整数或浮点数。我这样做的第一种方法是识别分数类型,然后将其输入三个字段之一,但如果需要添加新的分数类型,我不希望必须不断向数据库添加字段。我记得有人告诉我,如果您将某些内容存储为 varchar,那么将无法将其读取为整数、浮点数甚至日期。我的问题是,我可以将所有这三个都存储为一种特定类型,但是在从数据库中获取它并在我的 php 代码中使用它时以任何我需要的方式读取它?
3 回答
您可以使用CAST 和 CONVERT函数将字符串数据类型转换为另一种 MySQL 数据类型,例如 INT、FLOAT、DECIMAL、DATE、DATETIME 等。
有几个问题。你怎么知道一行中存储了什么数据类型?MySQL 确实支持 RegExp,但我不建议在 WHERE 子句中使用它。将数据类型存储在另一列中。
此外,在查询的 where 子句中使用强制转换函数会使它们运行缓慢。如果您需要根据数据搜索/排序,您应该使用正确的数据类型。也许您应该为每种数据类型添加一列;并且对于每一行,仅填充相应的列。
在我看来,您可以将该字段建模为 FLOAT,除非您绝对需要了解存储的变量类型。时间可以通过转换为时间戳转换为整数值。整数是实际设置的实数(浮点数)的子集,所以我想这样你就可以涵盖所有内容。浮点运算可能会导致精度和相等性测试出现一些问题,但要小心!
如果您对其执行数学运算,mysql 会很高兴地将文本转换为适当类型的数字。但是,它也会将非数字文本转换为零并对其执行相同的操作,因此您需要事先检查您是否仅拉取适当类型的字段。
此论坛帖子展示了如何向您的查询添加正则表达式条件,以确保您只提取其中包含数字数据的字段。但是,我认为使用单独的列来指示每条记录的分数类型可能更明智,并使用它来检索适当的分数。
我不知道如何将文本转换为日期(通过date()
它不起作用)。但是,请注意 mysql 日期格式 (2012-05-08 11:20:23) 的日期元素按重要性降序排列。如果您只想查找最高/最低日期,或按日期排序,则将它们视为字符串即可。