Ruby convert_tz с использованием MariaDB возвращает ноль
При регулярном выполнении:
select convert_tz(now(), "UTC", "Europe/London")
непосредственно на сервере MariaDB, он будет производить:
+-------------------------------------------+
| convert_tz(now(), "UTC", "Europe/London") |
+-------------------------------------------+
| 2013-03-07 16:01:32 |
+-------------------------------------------+
Но если сделать это через ruby 1.8.7 или 1.9.3 width:
q = 'select convert_tz(now(), "UTC", "Europe/London")'
ActiveRecord::Base.connection.select_all(q)
это произведет:
"convert_tz(now(), \"UTC\", \"Europe/London\")" => nil
Сделайте то же самое с настройкой MySQL:
q = 'select convert_tz(now(), "UTC", "Europe/London")'
ActiveRecord::Base.connection.select_all(q)
результаты в:
"convert_tz(now(), \"UTC\", \"Europe/London\")" => "2013-03-07 16:05:14"
Теперь протестировано в MySQLWorkbench, и там происходит тот же плохой результат, вместо преобразованного времени возвращается null.
Так что, я думаю, это что-то в MariaDB или?
2 ответа
Обновление до 5.5.29-MariaDB решило проблему, поэтому, я думаю, это было связано с 5.5.28.
Скорее всего, вам не хватает информации о часовом поясе. Вы можете создать это с помощью mysql_tzinfo_to_sql
утилиту или загрузку таблиц с сайта разработчика mysql.
Если вы работаете на Mac или Linux, то, вероятно, вам подойдет следующее (возможно, придется обновить местоположение вашей zoneinfo)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -Dmysql