При взгляде на структуру customer_entity
таблицы, я заметил , что created_at
поле имеет этот атрибут: on update CURRENT_TIMESTAMP
. Таким образом, каждый раз, когда строка обновляется, created_at
отметка времени изменяется.
Кажется, этот атрибут должен существовать на updated_at
поле, а не на created_at
поле. Я знаю, что редко эта таблица модифицируется напрямую из-за структуры EAV, но все равно кажется неправильным модифицировать created_at
поле.
Есть ли причина для этой структуры таблицы, или это просто ошибка?
Изменить: я нашел подтвержденный отчет об ошибке от Magento для этого. Выпуск № 27944. К сожалению, вы должны войти, чтобы просмотреть его. http://www.magentocommerce.com/bug-tracking/issue?issue=13882
magento-1.7
Ryre
источник
источник
cron_schedule
,api_user
,admin_user
,customer_entity_address
,downloadable_link_purchased
,downloadable_link_purchased_item
,index_event
,eav_entity
log_customer
,sales_flat_quote_address
,sales_flat_quote
,sales_flat_quote_address_item
,sales_flat_quote_payment
,sales_flat_quote_shipping_rate
,sales_recurring_profile
. Там могут быть и другие. Я как бы потерял интерес в какой-то момент, когда искал их.sales_flat_quote
сначала заметил , потом проверилcustomer_entity
. Мы только заметили это, потому что некоторые из наших отчетов не имели никакого смысла. Может ли это быть ошибкой?Ответы:
Вот что я нашел. Проблема появляется только в Magento CE 1.6+ (и соответствующих версиях EE). Это из-за новых скриптов установки / обновления, использующих DDL в сочетании с mysql.
В версиях до 1.6 это, как
created_at
иupdated_at
столбцов выглядело так:В 1.6+ ddl выглядит так:
и генерирует:
Разница в том, что
default
значение отсутствует.И, как описано здесь ,
А поскольку MySQL допускает только один столбец отметки времени со
CURRENT_TIMESTAMP
значением по умолчанию или дляon update
,created_at
столбец заканчивается следующим образом.Это определенно ошибка Magento.
источник
created_at
отметка времени NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Создано в'. И в примечаниях к выпуску упоминается, что «клиент, поскольку« дата верна ».`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Created At'
Прежде всего, прочитайте ответ Мариуса, чтобы увидеть, что происходит в базе данных.
Я просто хотел упомянуть, что большинство разработчиков не столкнется с этой проблемой, если их модель должным образом расширится
Mage_Core_Model_Abstract
. Стек выглядит так:Your_Model::save
звонкиMage_Core_Model_Abstract::save
звонкиMage_Eav_Model_Entity_Abstract::save
звонкиMage_Eav_Model_Entity_Abstract::_beforeSave
звонкиMage_Eav_Model_Entity_Abstract::walkAttributes
звонкиMage_Eav_Model_Entity_Attribute_Backend_Time_Created::beforeSave
Это делает следующее:
Просто отметьте, что это может иметь проблемы для некоторых локалей как в CE> = 1.8.x, так и в EE> = 1.13.x.
источник
Мы тоже нашли эту ошибку и думаем, что она основана на разнице между американским и европейским кодированием дат.
В Соединенных Штатах даты пишутся ММ-ДД-ГГГГ. (02-10-2015 = 10 февраля 2015 г.) Но в Европе и многих других местах даты пишутся ДД-ММ-ГГГГ. (02-10-2015 = 2 октября 2015 г. или 2 октября 2015 г.).
В то время как Magento базируется в США, большая часть разработки была сделана программистами в Украине.
Мы исправили эту ошибку с помощью бесплатного расширения Magento (чтобы вам не приходилось изменять код ядра Magento). Мы разместили его на нашем сайте для бесплатной загрузки: http://www.CustomerParadigm.com/download/Magento-Date-Switch-Fix-Extension.zip
Я рассказал об этом более подробно в нашем блоге здесь: http://www.customerparadigm.com/magento-bug-magento-customer-create-date-juxtaposition/
источник
CE 1.9 исправил ошибку в CE 1.8.1 Ниже приведен diff:
источник