Adobe Commerce資料庫數值超出範圍,INT
到BIGINT
INT
到BIGINT
結構描述更新),商家必須一律檢查他們要變更的欄位與另一個資料表沒有任何外部索引鍵關係。 如果欄位確實與其他資料表有外部索引鍵關係,則會出現問題,因為相關欄位仍為INT
。 他們可以使用以下查詢來驗證這一點。 此查詢列出資料庫中給定表格欄位可用的外部索引鍵關係:code language-mysql |
---|
|
受影響的產品和版本
- Adobe Commerce (所有部署方法)所有支援的版本
當您無法儲存產品更新(例如價格變更)或刪除及複製產品時,本文會提供解決方案。
您可能會看到錯誤訊息 無法儲存庫存專案。 請重試。 在產品更新後,您可能無法部署。 當您執行php bin/magento setup:upgrade
時,您也可能看到下列MySQL錯誤訊息(在雲端基礎結構上的Adobe Commerce上,此錯誤顯示在部署記錄中):
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`)
本文所述的解決方案包括:
- 將
[ AUTO_INCREMENT ]
更新為資料表的下一個值或 INT
到BIGINT
結構描述更新
您使用哪個解決方案取決於導致問題的因素。 請參閱以下步驟以找出原因。
檢查原因的步驟
在終端機中執行下列命令,檢查主索引鍵的最大值: SELECT MAX(value_id) FROM catalog_product_entity_int;
如果max(value_id)
小於max int(11) [ 4294967296 ]
,且[ AUTO_INCREMENT ]
的值大於或等於max int(11) [ 4294967296 ]
,則請考慮將更新為資料表中的下一個值。 [ AUTO_INCREMENT ]
否則,請考慮INT
到BIGINT
的結構描述更新。
將AUTO_INCREMENT
更新為資料表中的下一個值 update-the-auto-increment-to-the-next-value-from-the-table
如果顯示的值低於max int(11) [ 4294967296 ]
(如以下終端機輸出範例所示),則表[ AUTO_INCREMENT ]
已變更為大於或等於max [ int(11) ]
值的數字。
MariaDB [xxx]> SELECT MAX(value_id) FROM catalog_product_entity_int;
+---------------------+
| MAX(source_item_id) |
+---------------------+
| 4283174130 |
+---------------------+
若要檢查是否發生此問題,請在終端機中執行以下命令:
MariaDB [xxx]> show create table catalog_product_entity_int;
...
) ENGINE=InnoDB AUTO_INCREMENT=4294967297 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Integer Attribute Backend Table';
如上述範例輸出所示,資料表[ AUTO_INCREMENT ]
已變更為大於max int(11) [ 4294967296 ]
的數字。 解決方案是將[ AUTO_INCREMENT]
更新為資料表中的下一個值:
ALTER TABLE catalog_product_entity_int AUTO_INCREMENT = 4283174131;
INT
到BIGINT
結構描述更新 int_to_bigint_schema_update
但是,如果執行以下查詢SELECT MAX(value_id) FROM catalog_product_entity_int;
時,顯示的值高於max int(11) [ 4294967296 ]
,請考慮執行INT
到BIGINT
的結構描述更新。 資料型別BIGINT
的值範圍較大。
若要這麼做:
- 在 app/code/ 目錄中建立自訂模組。
- 在自訂模組中建立 db_schema.xml。 在 db_schema.xml 中,您會將資料型別設定為
BIGINT
。 - 新增下列內容,然後執行
bin/magento setup:upgrade
以將上述變更套用至對應的表格。
<?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>
相關閱讀
- Commerce安裝指南中的一般 MySQL 指南
- 資料庫上載遺失與我們支援知識庫中 MySQL的連線
- 在我們的支援知識庫中雲端基礎結構上Adobe Commerce的資料庫最佳實務
- 在我們的支援知識庫中,Adobe Commerce中雲端基礎結構最常見的資料庫問題
- 在Commerce實作行動手冊中修改資料庫表格的最佳實務