Valeur numérique de base de données Adobe Commerce hors plage, INT à BIGINT
INT à BIGINT mise à jour du schéma), les commerçants doivent toujours vérifier que le champ qu’ils vont modifier NE possède AUCUNE relation de clé étrangère avec une autre table. Si le champ possède des relations de clé étrangère avec une autre table, des problèmes se produiront car le champ associé est toujours INT. Il peut utiliser la requête suivante pour vérifier cela. Cette requête répertorie les relations de clé étrangère disponibles dans la base de données pour le champ de table donné :| code language-mysql |
|---|
|
Produits et versions concernés
- Adobe Commerce (toutes les méthodes de déploiement) toutes les versions prises en charge
Cet article fournit des solutions pour les cas où vous ne pouvez pas enregistrer une mise à jour d’un produit, comme une modification de prix, ou supprimer et dupliquer un produit.
Le message d'erreur L'enregistrement de l'article stocké a échoué) s'affiche. Veuillez réessayer. Il se peut que le déploiement échoue après une mise à jour du produit. Il se peut également que le message d’erreur MySQL suivant s’affiche lorsque vous exécutez php bin/magento setup:upgrade (sur Adobe Commerce sur les infrastructures cloud, cette erreur s’affiche dans les journaux de déploiement) :
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`)
Les solutions décrites dans l’article sont les suivantes :
- Mettez à jour la
[ AUTO_INCREMENT ]à la valeur suivante dans le tableau ou INTàBIGINTmise à jour du schéma
La solution que vous utilisez dépend de la cause du problème. Référez-vous aux étapes ci-dessous pour isoler la cause.
Étapes de vérification de la cause
Vérifiez la valeur la plus élevée de la clé primaire en exécutant la commande suivante dans le terminal : SELECT MAX(value_id) FROM catalog_product_entity_int;
Si la max(value_id) est inférieure à la max int(11) [ 4294967296 ] et que la [ AUTO_INCREMENT ] a une valeur supérieure ou égale à la max int(11) [ 4294967296 ], envisagez de mettre à jour la [ AUTO_INCREMENT ] à la valeur suivante du tableau. Sinon, envisagez une INT pour BIGINT mise à jour du schéma.
Mettez à jour la AUTO_INCREMENT à la valeur suivante dans le tableau update-the-auto-increment-to-the-next-value-from-the-table
Si la valeur affichée est inférieure à max int(11) [ 4294967296 ], comme le montre l'exemple de sortie de terminal ci-dessous, un tableau [ AUTO_INCREMENT ] a été modifié en un nombre plus grand ou égal à la valeur max [ int(11) ].
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
Pour vérifier si cela s’est produit, exécutez la commande suivante dans le 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';
Comme vous pouvez le voir dans l’exemple de sortie ci-dessus, la [ AUTO_INCREMENT ] du tableau a été remplacée par un nombre plus grand que la max int(11) [ 4294967296 ]. La solution consiste à mettre à jour le [ AUTO_INCREMENT] à la valeur suivante du tableau :
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
INT à BIGINT mise à jour du schéma int_to_bigint_schema_update
Cependant, si lors de l’exécution de la requête suivante SELECT MAX(value_id) FROM catalog_product_entity_int; la valeur affichée est supérieure à , max int(11) [ 4294967296 ] envisagez d’effectuer une INT à BIGINT mise à jour du schéma . Le type de données BIGINT a une plage de valeurs plus large.
Pour ce faire :
- Créez un module personnalisé dans le répertoire app/code/.
- Dans le module personnalisé, créez un fichier db_schema.xml. Dans db_schema.xml définissez le type de données sur
BIGINT. - Ajoutez le contenu suivant, puis exécutez
bin/magento setup:upgradepour appliquer les modifications ci-dessus au tableau correspondant.
<?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>
Lecture connexe
- Instructions générales MySQL dans le Guide d’installation de Commerce
- Bonnes pratiques relatives aux bases de données pour Adobe Commerce sur les infrastructures cloud dans notre base de connaissances d’assistance
- Problèmes de base de données les plus courants dans Adobe Commerce sur les infrastructures cloud dans notre base de connaissances d’assistance
- Recommandations relatives à la modification des tables de base de données dans le manuel Commerce Implementation Playbook