【问题标题】:Which SQL type should I use to input the value 4.865472349我应该使用哪种 SQL 类型来输入值 4.865472349
【发布时间】:2012-08-24 08:10:06
【问题描述】:

PHP 运行一个正确计算值的脚本。当我回显该值时,它会显示为 4.865472349

然后使用一个简单的更新脚本将值输入到我的数据库中。

$query = "UPDATE members
     SET rating = $r 
     WHERE username = '$username'";
mysql_query($query);

当我这样做时,输入到数据库中的值为 5。

如果我将前面公式中的 $r 直接替换为 4.865472349,它会产生相同的结果。

显然这是因为我的 SQL 类型设置为“整数”

但我不确定要改成什么来解决这个问题。有什么帮助吗?

【问题讨论】:

  • 您使用的是什么数据库?您允许的值范围是多少?您需要什么精度?
  • 由于mysql_query 行添加了mysql标签。

标签: php mysql sql types


【解决方案1】:

如果想要和 4.865472349 一样的精度,可以使用 DECIMAL(10,9)

参考

例如,DECIMAL(18,9) 列的小数点两边各有九位数字,因此整数部分和小数部分各需要 4 个字节。 DECIMAL(20,6) 列有 14 个整数位和 6 个小数位。整数位中的九位需要四个字节,其余五位需要 3 个字节。六个小数位需要 3 个字节。

假设你使用的是 MySql

【讨论】:

  • +1。 DECIMAL 类型是要走的路,如果你有一个有界范围(最大值),并且可以在 SCALE 和 PRECISION 的指定范围内生活。否则,DOUBLE 将提供更大的范围,但在存储和检索十进制值时会有些不精确(近似值)。
【解决方案2】:

您可能应该使用DOUBLE。它与 PHP 中的浮点数具有相同的精度和范围(在大多数配置中)。

使用 PHPMyAdmin 切换类型:

  1. 点击表格
  2. 点击结构
  3. 点击评分旁边的更改(铅笔图标)
  4. 在“类型”下选择“DOUBLE”选项
  5. 点击保存

【讨论】:

  • 我会使用小数,这样你以后就不会遇到浮点算术问题了。
  • +1。 DOUBLE 是要走的路,只要您不关心十进制近似值。如果您需要精确的十进制值,没有近似值,并且最大值有一个有界范围,因此您可以在给定的 SCALE 和 PRECISION 范围内生活,那么DECIMAL 是您的最佳选择。
【解决方案3】:

您可以使用浮点数、双精度数或十进制数,具体取决于您要存储的数字。我会说浮动已经足够好了。

【讨论】:

    【解决方案4】:

    编辑数据库中的列类型,使其能够容纳的不仅仅是整数。

    ALTER TABLE members
    CHANGE rating rating float(10,9); 
    

    【讨论】:

    • 关于在 phpmyadmin 中执行此操作的任何建议
    • 选择数据库,找到sql列,复制、粘贴、执行。也有一种gui方式。可能类似于编辑表并将列类型从 INT 更改为 float(10,9)
    猜你喜欢
    • 2017-06-10
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多