gpt4 book ai didi

php - MYSQL 忽略相似但不相同数据的更新命令

转载 作者:行者123 更新时间:2023-11-29 07:05:02 28 4
gpt4 key购买 nike

原始问题

mysql-server-6.0.10

我遇到了这个问题,我正在使用 COMPRESS 函数更新具有 BASE64 编码值的字段。 “更新的”base64 字符串与数据库中当前的值仅略有不同,但不同。唯一不同的部分是字符串的最后几个字节。问题是 mysql 将这些值视为相同,因此跳过了更新。它返回时没有错误,让我的程序按照指示执行操作,但随后您返回并且数据未被更改。

例如,第一个是之前插入数据库的 base64 字符串,第二个是我要覆盖的内容:

YToxOntpOjA7YToxOntzOjE1OiJ0cmFja2luZ19udW1iZXIiO2k6MjM0MjM0MjM0MzI0MDAwO319
YToxOntpOjA7YToxOntzOjE1OiJ0cmFja2luZ19udW1iZXIiO3M6MTU6IjIzNDIzNDIzNDMyNDExMSI7fX0=

我正在运行这个查询:

UPDATE TABLE SET fieldname=COMPRESS('YToxOntpOjA7YToxOntzOjE1OiJ0cmFja2luZ19udW1iZXIiO3M6MTU6IjIzNDIzNDIzNDMyNDExMSI7fX0=') WHERE id = 'SOMEID';

Mysql 返回 0 行受影响。

我可以通过 PHPMyAdmin 在 SQL 查询窗口中重现它,所以我知道这不是代码问题。

无论字符串是否以相同方式开始,我如何强制它只更新,因为它显然会检查整个字符串?现在我的解决方法是用一个查询清除当前数据,然后运行另一个查询以更新任何内容。虽然这是低效的,但我对此并不满意。

第一个问题更新

我实际上发现这是 JSON_NUMERIC_CHECK 的 PHP 错误的结果!

该值已正确保存在数据库中(由于压缩而无法分辨)但是当我要返回的脚本通过 JSON_ENCODE 将数据从数据库中加载出来时,值被 JSON_NUMERIC_CHECK 破坏了。

查看我提交的错误报告: https://bugs.php.net/bug.php?id=60111

第二题更新及解答

所以事实证明我在这方面远远领先于自己。我错误地使用了 JSON_NUMERIC_CHECK。我将其用作一揽子解决方案,以确保所有数值都是数字。这种逻辑的缺陷是 JSON_NUMERIC_CHECK 的目的是尝试将所有数字字符串转换为整数,在 32 位操作系统环境中,int val 的位数是有限的,因此应该使用指数表达式!

归根结底,在我的系统中,[tracking number] 有可能实际上是一串非常长的数字。 JSON_NUMERIC_CHECK 通过将其转换为指数表示的 int val 来完成它应该做的事情。

对此的实际修复是不使用 JSON_NUMERIC_CHECK 并确保我的 var 类型是正确的,在我实际需要 int vals 的地方创建对象,然后通过 JSON 传递到前端。

呸,满嘴都是,但我想如果其他人遇到这个问题,它可能会有所帮助。超!

最佳答案

对不起,伙计们,没关系,问题是我提供的值被视为 INT 而不是 STRING,并且它超过了 INT 的最大大小,因此它重置为 MAX INT,因此是同一个字符串.

有时只要想清楚就可以在这里发布问题就足以帮助我解决问题:)

更新:

我实际上发现这是 JSON_NUMERIC_CHECK 的 PHP 错误的结果!

该值已正确保存在数据库中(由于压缩而无法分辨)但是当我要返回的脚本通过 JSON_ENCODE 将数据从数据库中加载出来时,值被 JSON_NUMERIC_CHECK 破坏了。

更新:

我实际上只是遥遥领先于我自己。错误地使用 JSON_NUMERIC_CHECK。我的错!

关于php - MYSQL 忽略相似但不相同数据的更新命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com