Valor numérico do banco de dados Adobe Commerce fora do intervalo, INT
a BIGINT
INT
para BIGINT
atualização de esquema), os comerciantes devem sempre verificar se o campo que vão alterar NÃO tem nenhuma relação de chave estrangeira com outra tabela. Se o campo não tiver relações de chave estrangeira com outra tabela, haverá problemas porque o campo relacionado ainda é INT
. Eles podem usar a seguinte query para verificar isso. Esta consulta lista as relações de chave estrangeira disponíveis no banco de dados para o campo de tabela especificado:code language-mysql |
---|
|
Produtos e versões afetados
- Adobe Commerce (todos os métodos de implantação) todas as versões com suporte
Este artigo fornece soluções para quando não é possível salvar uma atualização de produto, como uma alteração de preço, ou excluir e duplicar um produto.
Você pode ver a mensagem de erro O item de estoque não pôde ser salvo. Tente novamente. Talvez não seja possível implantar o após uma atualização de produto. Você também pode ver a seguinte mensagem de erro MySQL ao executar o php bin/magento setup:upgrade
(no Adobe Commerce na infraestrutura de nuvem, esse erro é mostrado nos logs de implantação):
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`)
As soluções descritas no artigo são:
- Atualize o
[ AUTO_INCREMENT ]
para o próximo valor da tabela ou - Atualização de esquema de
INT
paraBIGINT
A solução usada depende do que causou o problema. Consulte as etapas abaixo para isolar a causa.
Etapas para verificar a causa
Verifique o valor mais alto da chave primária executando o seguinte comando no terminal: SELECT MAX(value_id) FROM catalog_product_entity_int;
Se max(value_id)
for menor que max int(11) [ 4294967296 ]
e [ AUTO_INCREMENT ]
tiver um valor maior ou igual a max int(11) [ 4294967296 ]
, considere atualizar [ AUTO_INCREMENT ]
para o próximo valor da tabela. Caso contrário, considere uma atualização de esquema de INT
para BIGINT
.
Atualizar AUTO_INCREMENT
para o próximo valor da tabela update-the-auto-increment-to-the-next-value-from-the-table
Se o valor mostrado for menor que max int(11) [ 4294967296 ]
, conforme mostrado no exemplo de saída de terminal abaixo, então uma tabela [ AUTO_INCREMENT ]
foi alterada para um número maior ou igual ao valor max [ int(11) ]
.
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
Para verificar se isso ocorreu, execute o seguinte comando no 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 você pode ver no exemplo de saída acima, a tabela [ AUTO_INCREMENT ]
foi alterada para um número maior que max int(11) [ 4294967296 ]
. A solução é atualizar o [ AUTO_INCREMENT]
para o próximo valor da tabela:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
Atualização de esquema de INT
para BIGINT
int_to_bigint_schema_update
No entanto, se, durante a execução da seguinte consulta SELECT MAX(value_id) FROM catalog_product_entity_int;
, o valor mostrado for maior que max int(11) [ 4294967296 ]
, considere fazer uma atualização de esquema de INT
para BIGINT
. O tipo de dados BIGINT
tem um intervalo maior de valores.
Para fazer isso:
- Crie um módulo personalizado dentro do diretório app/code/.
- No módulo personalizado, crie um db_schema.xml. Em db_schema.xml, você definirá o tipo de dados como
BIGINT
. - Adicione o conteúdo a seguir e execute
bin/magento setup:upgrade
para aplicar as alterações acima à tabela correspondente.
<?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>
Leitura relacionada
- Diretrizes MySQL gerais no Guia de Instalação do Commerce
- O carregamento do banco de dados perde a conexão com MySQL em nossa base de dados de conhecimento de suporte
- Práticas recomendadas do banco de dados para o Adobe Commerce na infraestrutura em nuvem em nossa base de conhecimento de suporte
- Problemas mais comuns do banco de dados na Adobe Commerce na infraestrutura em nuvem em nossa base de dados de conhecimento de suporte
- Práticas recomendadas para modificar tabelas de banco de dados no Manual de implementação do Commerce