Adobe Commerce数据库数值超出范围,INT
到BIGINT
INT
到BIGINT
架构更新)之前,商家必须始终检查他们将要更改的字段是否与其他表没有任何外键关系。 如果该字段确实与其他表有外键关系,则会出现问题,因为相关字段仍为INT
。 他们可以使用以下查询来验证这一点。 此查询列出数据库中给定表字段的外键关系:code language-mysql |
---|
|
受影响的产品和版本
- Adobe Commerce(所有部署方法)所有支持的版本
当您无法保存产品更新(如价格更改或删除以及复制产品)时,本文提供了相应的解决方案。
您可能会看到错误消息 无法保存库存项目。 请重试。 在产品更新后,您可能无法部署。 在运行php bin/magento setup:upgrade
时,您还可能会看到以下MySQL错误消息(在云基础架构上的Adobe Commerce上,此错误显示在部署日志中):
SQLSTATE[22003]: Numeric value out of range: 167 Out of range value for column 'value_id' at row 1, query was: INSERT INTO `catalog_product_entity_decimal` (`attribute_id`,`store_id`,`row_id`,`value`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE `attribute_id` = VALUES(`attribute_id`), `store_id` = VALUES(`store_id`), `row_id` = VALUES(`row_id`), `value` = VALUES(`value`)
本文中介绍的解决方案包括:
- 将
[ AUTO_INCREMENT ]
更新为表中的下一个值或 INT
到BIGINT
架构更新
您使用的解决方案取决于导致问题的原因。 请参阅以下步骤以找出原因。
检查原因的步骤
通过在终端中运行以下命令检查主键的最大值: SELECT MAX(value_id) FROM catalog_product_entity_int;
如果max(value_id)
小于max int(11) [ 4294967296 ]
,且[ AUTO_INCREMENT ]
的值大于或等于max int(11) [ 4294967296 ]
,则考虑将[ AUTO_INCREMENT ]
更新为表中的下一个值。 否则,请考虑INT
到BIGINT
的架构更新。
将AUTO_INCREMENT
更新为表中的下一个值 update-the-auto-increment-to-the-next-value-from-the-table
如果显示的值小于max int(11) [ 4294967296 ]
(如下例终端输出所示),则表[ AUTO_INCREMENT ]
已更改为大于或等于max [ int(11) ]
值的数字。
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
要检查是否已发生这种情况,请在终端中运行以下命令:
MariaDB [xxx]> show create table catalog_product_entity_int;
...
) ENGINE=InnoDB AUTO_INCREMENT=4294967297 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Integer Attribute Backend Table';
如上面的示例输出所示,表[ AUTO_INCREMENT ]
已更改为大于max int(11) [ 4294967296 ]
的数字。 解决方案是将[ AUTO_INCREMENT]
更新为表中的下一个值:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
INT
到BIGINT
架构更新 int_to_bigint_schema_update
但是,在运行以下查询SELECT MAX(value_id) FROM catalog_product_entity_int;
时,如果显示的值大于max int(11) [ 4294967296 ]
,请考虑执行INT
到BIGINT
的架构更新。 数据类型BIGINT
的值范围更大。
为此,请执行以下操作:
- 在 app/code/ 目录中创建一个自定义模块。
- 在自定义模块中创建 db_schema.xml。 在 db_schema.xml 中,您将数据类型设置为
BIGINT
。 - 添加以下内容,然后执行
bin/magento setup:upgrade
以将上述更改应用到相应的表。
<?xml version="1.0"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="catalog_product_entity_int">
<column xsi:type="bigint" name="value_id" unsigned="false" nullable="false" identity="true"
comment="Value ID"/>
</table>
</schema>
相关阅读
- Commerce安装指南中的常规 MySQL 指南
- 数据库上载已断开与 MySQL的连接(在我们的支持知识库中)
- 我们的支持知识库中的云基础架构上Adobe Commerce的数据库最佳实践
- 在我们支持知识库中,Adobe Commerce中关于云基础架构的最常见数据库问题
- 在Commerce实施行动手册中修改数据库表的最佳实践