Valor numérico de la base de datos Adobe Commerce fuera del intervalo, INT
a BIGINT
INT
a BIGINT
actualización de esquema), los comerciantes siempre deben comprobar que el campo que van a cambiar NO tiene ninguna relación de clave externa con otra tabla. Si el campo tiene relaciones de clave externa con otra tabla, habrá problemas porque el campo relacionado sigue siendo INT
. Pueden utilizar la siguiente consulta para verificarlo. Esta consulta enumera las relaciones de clave externa disponibles en la base de datos para el campo de tabla dado:code language-mysql |
---|
|
Productos y versiones afectados
- Adobe Commerce (todos los métodos de implementación) todas las versiones compatibles
Este artículo proporciona soluciones para los casos en los que no pueda guardar una actualización de producto, como un cambio de precio, o eliminar y duplicar un producto.
Puede ver el mensaje de error No se pudo guardar el elemento de stock. Inténtelo de nuevo. Es posible que no pueda implementar después de una actualización de producto. También puede ver el siguiente mensaje de error de MySQL al ejecutar php bin/magento setup:upgrade
(en Adobe Commerce en la infraestructura de la nube, este error se muestra en los registros de implementación):
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`)
Las soluciones descritas en el artículo son las siguientes:
- Actualizar
[ AUTO_INCREMENT ]
al siguiente valor de la tabla o - Actualización del esquema de
INT
aBIGINT
La solución que utilice depende de la causa del problema. Consulte los pasos a continuación para aislar la causa.
Pasos para comprobar la causa
Compruebe el valor más alto de la clave principal ejecutando el siguiente comando en el terminal: SELECT MAX(value_id) FROM catalog_product_entity_int;
Si max(value_id)
es menor que max int(11) [ 4294967296 ]
y [ AUTO_INCREMENT ]
tiene un valor mayor o igual que max int(11) [ 4294967296 ]
, considere actualizar [ AUTO_INCREMENT ]
al siguiente valor de la tabla. De lo contrario, considere una actualización de esquema INT
a BIGINT
.
Actualizar AUTO_INCREMENT
al siguiente valor de la tabla update-the-auto-increment-to-the-next-value-from-the-table
Si el valor mostrado es menor que max int(11) [ 4294967296 ]
, como se muestra en el siguiente ejemplo de salida de terminal, entonces una tabla [ AUTO_INCREMENT ]
ha cambiado a un número mayor o igual que el valor max [ int(11) ]
.
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
Para comprobar si esto ha ocurrido, ejecute el siguiente comando en el terminal:
MariaDB [xxx]> show create table catalog_product_entity_int;
...
) ENGINE=InnoDB AUTO_INCREMENT=4294967297 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Integer Attribute Backend Table';
Como puede ver en el resultado del ejemplo anterior, la tabla [ AUTO_INCREMENT ]
ha cambiado a un número mayor que max int(11) [ 4294967296 ]
. La solución consiste en actualizar [ AUTO_INCREMENT]
al siguiente valor de la tabla:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
Actualización del esquema de INT
a BIGINT
int_to_bigint_schema_update
Sin embargo, si al ejecutar la siguiente consulta SELECT MAX(value_id) FROM catalog_product_entity_int;
el valor mostrado es mayor que max int(11) [ 4294967296 ]
, considere la posibilidad de realizar una actualización de esquema de INT
a BIGINT
. El tipo de datos BIGINT
tiene un rango de valores mayor.
Para ello:
- Cree un módulo personalizado dentro del directorio app/code/.
- En el módulo personalizado, cree un db_schema.xml. En db_schema.xml, establecerá el tipo de datos en
BIGINT
. - Agregue el siguiente contenido y luego ejecute
bin/magento setup:upgrade
para aplicar los cambios anteriores a la tabla correspondiente.
<?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>
Lectura relacionada
- Directrices generales MySQL 2} en la Guía de instalación de Commerce
- La carga de la base de datos pierde la conexión con MySQL en nuestra base de conocimiento de soporte
- Prácticas recomendadas de bases de datos para Adobe Commerce en infraestructura en la nube en nuestra base de conocimiento de soporte
- Problemas más comunes de las bases de datos en Adobe Commerce sobre la infraestructura en la nube en nuestra base de conocimiento de asistencia
- Prácticas recomendadas para modificar tablas de base de datos en el libro de estrategias de implementación de Commerce