Почему ActiveRecord сокращает эту точность временной метки?

#mysql #activerecord

#mysql #activerecord

Вопрос:

Я использую MySQL. У меня есть модель ActiveRecord, которая ведет себя следующим образом:

 record = MyModel.new(some_attrs)
record.save
record.created_at.utc.iso8601(6) #=> "2019-03-07T21:46:19.255634Z"
record.reload
record.created_at.utc.iso8601(6) #=> "2019-03-07T21:46:19.000000Z"
  

Почему он теряет всю субсекундную точность при перезагрузке?

Комментарии:

1. MySQL поддерживает 2019-03-07 21:46:19.255634 в DATETIME (6) просто отлично, он не может обрабатывать эти 2019-03-07T21:46:19.255634Z форматы. Смотрите example1 и example2 .. ISO8601 с T и Z в формате не будет работать на MySQL..

Ответ №1:

Я предполагаю, что начальная временная метка создается ActiveRecord, поскольку в MySQL нет RETURNING предложения, указывающего, какое значение он фактически вставил. Но после перезагрузки он использует временную метку с меньшей точностью, которую фактически хранит MySQL.