Valore numerico del database Adobe Commerce non compreso nell'intervallo, da INT
a BIGINT
INT
in BIGINT
aggiornamento schema) i commercianti devono sempre verificare che il campo che stanno per modificare NON presenti relazioni di chiave esterna con un'altra tabella. Se il campo ha relazioni di chiave esterna con un'altra tabella, si verificheranno problemi perché il campo correlato è ancora INT
. Per verificarlo, è possibile utilizzare la query seguente. Questa query elenca le relazioni di chiave esterna disponibili nel database per il campo di tabella specificato:code language-mysql |
---|
|
Prodotti e versioni interessati
- Adobe Commerce (tutti i metodi di distribuzione) tutte le versioni supportate
Questo articolo fornisce soluzioni per i casi in cui non è possibile salvare un aggiornamento del prodotto, ad esempio una modifica del prezzo o l’eliminazione e la duplicazione di un prodotto.
È possibile che venga visualizzato il messaggio di errore Impossibile salvare l'elemento azionario. Riprova. È possibile che la distribuzione non riesca dopo un aggiornamento del prodotto. È inoltre possibile che venga visualizzato il seguente messaggio di errore MySQL quando si esegue php bin/magento setup:upgrade
(in Adobe Commerce sull'infrastruttura cloud questo errore viene visualizzato nei registri di distribuzione):
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`)
Le soluzioni descritte nell’articolo sono:
- Aggiorna
[ AUTO_INCREMENT ]
al valore successivo dalla tabella oppure - Aggiornamento schema da
INT
aBIGINT
La soluzione utilizzata dipende dalla causa del problema. Per isolare la causa, consulta i passaggi seguenti.
Passaggi per verificare la causa
Controllare il valore massimo della chiave primaria eseguendo il comando seguente nel terminale: SELECT MAX(value_id) FROM catalog_product_entity_int;
Se max(value_id)
è inferiore a max int(11) [ 4294967296 ]
e [ AUTO_INCREMENT ]
ha un valore maggiore o uguale a max int(11) [ 4294967296 ]
, provare ad aggiornare il valore [ AUTO_INCREMENT ]
al valore successivo dalla tabella. In caso contrario, considerare un aggiornamento dello schema da INT
a BIGINT
.
Aggiorna AUTO_INCREMENT
al valore successivo dalla tabella update-the-auto-increment-to-the-next-value-from-the-table
Se il valore mostrato è inferiore a max int(11) [ 4294967296 ]
come mostrato nell'output del terminale di esempio seguente, una tabella [ AUTO_INCREMENT ]
è stata modificata in un numero maggiore o uguale al valore max [ int(11) ]
.
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
Per verificare se ciò si è verificato, esegui il seguente comando nel terminale:
MariaDB [xxx]> show create table catalog_product_entity_int;
...
) ENGINE=InnoDB AUTO_INCREMENT=4294967297 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Integer Attribute Backend Table';
Come è possibile vedere nell'output dell'esempio precedente, la tabella [ AUTO_INCREMENT ]
è stata modificata in un numero maggiore di max int(11) [ 4294967296 ]
. La soluzione consiste nell'aggiornare [ AUTO_INCREMENT]
al valore successivo dalla tabella:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
Aggiornamento schema da INT
a BIGINT
int_to_bigint_schema_update
Tuttavia, se durante l'esecuzione della seguente query SELECT MAX(value_id) FROM catalog_product_entity_int;
il valore visualizzato è superiore a max int(11) [ 4294967296 ]
, provare a eseguire un aggiornamento dello schema da INT
a BIGINT
. Il tipo di dati BIGINT
ha un intervallo di valori più ampio.
Per eseguire questa operazione:
- Crea un modulo personalizzato nella directory app/code/.
- Nel modulo personalizzato creare un db_schema.xml. In db_schema.xml verrà impostato il tipo di dati su
BIGINT
. - Aggiungere il contenuto seguente ed eseguire
bin/magento setup:upgrade
per applicare le modifiche precedenti alla tabella corrispondente.
<?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>
Lettura correlata
- Indicazioni generali MySQLnella Guida all'installazione di Commerce
- Il caricamento del database perde la connessione a MySQL nella Knowledge Base di supporto
- Best practice per il database di Adobe Commerce sull'infrastruttura cloud nella knowledge base per il supporto
- Problemi di database più comuni in Adobe Commerce sull'infrastruttura cloud nella knowledge base di supporto
- Best practice per la modifica delle tabelle del database nel playbook di implementazione di Commerce