Numerischer Wert der Adobe Commerce-Datenbank außerhalb des Bereichs, INT
bis BIGINT
INT
in BIGINT
Schema-Update) müssen Händler immer überprüfen, ob das Feld, das sie ändern werden, KEINE Fremdschlüsselbeziehungen zu einer anderen Tabelle aufweist. Wenn das Feld Beziehungen mit Fremdschlüsseln zu einer anderen Tabelle aufweist, treten Probleme auf, da das zugehörige Feld immer noch INT
ist. Sie können die folgende Abfrage verwenden, um dies zu überprüfen. Diese Abfrage listet die Fremdschlüsselbeziehungen auf, die in der Datenbank für das angegebene Tabellenfeld verfügbar sind:code language-mysql |
---|
|
Betroffene Produkte und Versionen
- Adobe Commerce (alle Bereitstellungsmethoden) alle unterstützten Versionen
Dieser Artikel bietet Lösungen für Fälle, in denen Sie eine Produktaktualisierung nicht speichern können, z. B. eine Preisänderung oder das Löschen und Duplizieren eines Produkts.
Möglicherweise wird die Fehlermeldung Das Lagerelement konnte nicht gespeichert werden. Bitte versuchen Sie es erneut. Nach einer Produktaktualisierung können Sie möglicherweise nicht bereitstellen. Möglicherweise wird auch die folgende MySQL-Fehlermeldung angezeigt, wenn Sie php bin/magento setup:upgrade
ausführen (in Adobe Commerce in der Cloud-Infrastruktur wird dieser Fehler in den Bereitstellungsprotokollen angezeigt):
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`)
Die im Artikel beschriebenen Lösungen sind:
- Aktualisieren Sie die
[ AUTO_INCREMENT ]
auf den nächsten Wert aus der Tabelle oder - Schemaaktualisierung
INT
bisBIGINT
Welche Lösung Sie verwenden, hängt von der Ursache des Problems ab. Gehen Sie wie folgt vor, um die Ursache zu isolieren.
Schritte zum Überprüfen der Ursache
Überprüfen Sie den höchsten Wert des Primärschlüssels, indem Sie den folgenden Befehl im Terminal ausführen: SELECT MAX(value_id) FROM catalog_product_entity_int;
Wenn der max(value_id)
kleiner als der max int(11) [ 4294967296 ]
ist und der [ AUTO_INCREMENT ]
einen Wert größer oder gleich dem max int(11) [ 4294967296 ]
hat, sollten Sie in Erwägung ziehen, die [ AUTO_INCREMENT ]
auf den nächsten Wert aus der Tabelle zu aktualisieren. Ansonsten sollten Sie ein INT
- BIGINT
Schema-Update in Erwägung ziehen.
Aktualisieren Sie den AUTO_INCREMENT
auf den nächsten Wert aus der Tabelle update-the-auto-increment-to-the-next-value-from-the-table
Wenn der angezeigte Wert kleiner als max int(11) [ 4294967296 ]
ist, wie im folgenden Beispiel für die Terminal-Ausgabe gezeigt, hat sich eine Tabelle [ AUTO_INCREMENT ]
in eine Zahl geändert, die größer oder gleich dem max [ int(11) ]
-Wert ist.
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
Um zu überprüfen, ob dies geschehen ist, führen Sie den folgenden Befehl im Terminal aus:
MariaDB [xxx]> show create table catalog_product_entity_int;
...
) ENGINE=InnoDB AUTO_INCREMENT=4294967297 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Integer Attribute Backend Table';
Wie Sie in der obigen Beispielausgabe sehen können, hat sich die Tabelle [ AUTO_INCREMENT ]
in eine größere Zahl als die max int(11) [ 4294967296 ]
geändert. Die Lösung besteht darin, den [ AUTO_INCREMENT]
auf den nächsten Wert aus der Tabelle zu aktualisieren:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
Schemaaktualisierung INT
bis BIGINT
int_to_bigint_schema_update
Wenn jedoch bei Ausführung der folgenden Abfrage SELECT MAX(value_id) FROM catalog_product_entity_int;
der angezeigte Wert höher als max int(11) [ 4294967296 ]
ist, sollten Sie eine Schemaaktualisierung vom Typ INT
bis BIGINT
vornehmen. Der Datentyp BIGINT
hat einen größeren Wertebereich.
Gehen Sie dazu folgendermaßen vor:
- Erstellen Sie ein benutzerdefiniertes Modul im Ordner app/code/ .
- Erstellen Sie im benutzerdefinierten Modul eine db_schema.xml -Datei. In db_schema.xml legen Sie den Datentyp auf
BIGINT
fest. - Fügen Sie den folgenden Inhalt hinzu und führen Sie dann
bin/magento setup:upgrade
aus, um die oben genannten Änderungen auf die entsprechende Tabelle anzuwenden.
<?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>
Verwandtes Lesen
- Allgemeine MySQL-Richtlinien im Commerce-Installationshandbuch.
- Der Upload der Datenbank verliert die Verbindung zu MySQL in unserer Support-Wissensdatenbank.
- Best Practices für die Datenbank für Adobe Commerce in der Cloud-Infrastruktur in unserer Support-Wissensdatenbank.
- Die häufigsten Datenbankprobleme in Adobe Commerce in der Cloud-Infrastruktur in unserer Support-Wissensdatenbank.