[PaaS uniquement]{class="badge informative" title="S’applique uniquement aux projets Adobe Commerce on Cloud (infrastructure PaaS gérée par Adobe) et aux projets On-premise."}

Valeur numérique de base de données Adobe Commerce hors plage, INT à BIGINT

WARNING
Avant de mettre en œuvre la solution décrite dans cet article (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
SELECT
     TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
   INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
     REFERENCED_TABLE_SCHEMA = '<database_name>' AND
     REFERENCED_TABLE_NAME = '<table_name>' AND
     REFERENCED_COLUMN_NAME = '<table_field>';

Produits et versions concernés

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 à BIGINT mise à 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

WARNING
Effectuez une sauvegarde de la base de données avant de modifier les tables. Mettez également le site en mode de maintenance. En outre, il est également recommandé d’exécuter la commande MySQL optimizer sur les tables de la base de données (uniquement sur les tables où des modifications ont été apportées) après avoir effectué les modifications.
NOTE
Le site doit être en mode de maintenance lors de l'exécution de la commande d'optimisation sur des tables spécifiques. Cette opération reconstruit complètement les tables et libère de l'espace après la suppression des données des tables.

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 :

  1. Créez un module personnalisé dans le répertoire app/code/.
  2. Dans le module personnalisé, créez un fichier db_schema.xml. Dans db_schema.xml définissez le type de données sur BIGINT.
  3. Ajoutez le contenu suivant, puis exécutez bin/magento setup:upgrade pour 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

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a