Ao olhar para a estrutura da customer_entity
tabela, notei que o created_at
campo tem esse atributo: on update CURRENT_TIMESTAMP
. Portanto, toda vez que a linha é atualizada, o created_at
carimbo de data e hora é alterado.
Parece que esse atributo deve existir no updated_at
campo, não no created_at
campo. Eu sei que é raro que esta tabela seja diretamente modificada devido à estrutura do EAV, mas ainda parece errado modificar o created_at
campo.
Existe uma razão para essa estrutura de tabela ou é apenas um bug?
Edit: Encontrei um relatório de bug confirmado do Magento para isso. Edição 27944. Infelizmente, você deve fazer login para visualizá-lo. http://www.magentocommerce.com/bug-tracking/issue?issue=13882
magento-1.7
Ryre
fonte
fonte
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
. Pode haver outros também. Eu meio que perdi o interesse em um ponto, enquanto procurava por eles.sales_flat_quote
primeiro e depois verifiqueicustomer_entity
. Acabamos de perceber porque alguns de nossos relatórios não faziam sentido. Isso pode realmente ser um bug?Respostas:
Aqui está o que eu encontrei. O problema aparece apenas no Magento CE 1.6+ (e versões EE correspondentes). É por causa dos novos scripts de instalação / atualização usando DDL em combinação com o mysql.
Nas versões anteriores à 1.6, era assim que as colunas
created_at
e seupdated_at
pareciam:No 1.6+, o ddl se parece com isso:
e gera:
A diferença é que o
default
valor está ausente.E, como descrito aqui ,
E como o MySQL permite apenas uma coluna de registro de data e hora
CURRENT_TIMESTAMP
como padrão ou paraon update
, acreated_at
coluna termina assim.Este é definitivamente um bug do Magento.
fonte
created_at
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMENTÁRIO 'Created At'. E nas notas de versão, é mencionado que "a data do" cliente desde "está correta".`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Created At'
Antes de tudo, leia a resposta de Marius para ver o que está acontecendo no banco de dados.
Eu só queria mencionar que a maioria dos desenvolvedores não terá esse problema se o modelo deles se estender adequadamente
Mage_Core_Model_Abstract
. A pilha fica assim:Your_Model::save
chamadasMage_Core_Model_Abstract::save
chamadasMage_Eav_Model_Entity_Abstract::save
chamadasMage_Eav_Model_Entity_Abstract::_beforeSave
chamadasMage_Eav_Model_Entity_Abstract::walkAttributes
chamadasMage_Eav_Model_Entity_Attribute_Backend_Time_Created::beforeSave
Isso faz o seguinte:
Observe que isso pode ter problemas para alguns códigos de idioma em CE> = 1.8.xe EE> = 1.13.x.
fonte
Também encontramos esse bug e achamos que ele se baseia na diferença entre a codificação de datas nos EUA e na Europa.
Nos Estados Unidos, as datas são escritas MM-DD-AAAA. (10-02-2015 = 10 de fevereiro de 2015). Mas na Europa e em muitos outros lugares, as datas são escritas DD-MM-AAAA. (10-02-2015 = 2 de outubro de 2015 ou 2 de outubro de 2015).
Enquanto o Magento está sediado nos EUA, grande parte do desenvolvimento foi feito por programadores na Ucrânia.
Corrigimos esse bug com uma extensão Magento gratuita (para que você não precise alterar nenhum código principal do Magento). Colocamos em nosso site como um download gratuito: http://www.CustomerParadigm.com/download/Magento-Date-Switch-Fix-Extension.zip
Eu cobri isso com mais detalhes em nosso blog aqui: http://www.customerparadigm.com/magento-bug-magento-customer-create-date-juxtaposition/
fonte
ce 1.9 corrigiu o erro no ce 1.8.1 Abaixo está o diff:
fonte