Не удалось загрузить часовые пояса?

Я пытаюсь загрузить timezones в свой экземпляр MySql (который работает на Unbuntu), чтобы я мог использовать функцию CONVERT_TZ, но когда я запускаю следующую команду:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Я получаю следующий вывод, и когда я пытаюсь использовать CONVERT_TZ, он просто возвращает NULL:

Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Asia/Riyadh87' как время зона. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Asia/Riyadh88' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Asia/Riyadh89' как время зона. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Mideast/Riyadh87' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Mideast/Riyadh88' как время зона. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/Mideast/Riyadh89' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/iso3166.tab' как время зона. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Asia/Riyadh87' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Asia/Riyadh88' как часовой пояс. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Asia/Riyadh89' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Mideast/Riyadh87' как часовой пояс. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Mideast/Riyadh88' в качестве часового пояса. Пропуская Это. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/posix/Mideast/Riyadh89' в качестве часового пояса. Пропуская Это. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Asia/Riyadh87' как часовой пояс. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Asia/Riyadh88' в качестве часового пояса. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Asia/Riyadh89' как часовой пояс. Пропустить его. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Mideast/Riyadh87' в качестве часового пояса. Пропуская Это. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Mideast/Riyadh88' в качестве часового пояса. Пропуская Это. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/right/Mideast/Riyadh89' в качестве часового пояса. Пропуская Это. Предупреждение: невозможно загрузить '/usr/share/zoneinfo/zone.tab' как время зона. Пропустите его.

Есть ли у кого-нибудь идея, почему это происходит?

PS:

Я использую следующий метод для преобразования datetimes:

CONVERT_TZ(NOW(),'UTC', 'PCT')

Возможно ли, что я просто неправильно конвертирую, и это является причиной результатов NULL?

Ответ 1

Это ошибка с файлами часовых поясов для Riyadh * на Debian:

http://bugs.mysql.com/bug.php?id=20545

Рекомендуемым обходным путем является просто игнорировать предупреждение (если вам не нужен этот часовой пояс, конечно):

mysql_tzinfo_to_sql /usr/share/lib/zoneinfo | mysql -uroot --force mysql

После импорта данных TZ с опцией --force вы сможете использовать CONVERT_TZ. Вот транскрипция того, что я только что сделал:

sh$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql --force 2> /dev/null
Enter password: ********
sh$ mysql -p
Enter password: ********
Server version: 5.1.49-3 (Debian)

mysql> select convert_tz(now(), 'UTC', 'CET');
+---------------------------------+
| convert_tz(now(), 'UTC', 'CET') |
+---------------------------------+
| 2013-08-13 21:04:34             |
+---------------------------------+
1 row in set (0.00 sec)

Ответ 2

К сожалению, решение Sylvain не сработало для меня.

Мне удалось заполнить таблицы часовых поясов нашего производственного сервера, экспортировав таблицы из PHPMyAdmin моего компьютера разработки (в Windows) и немного изменив создание script.

Поскольку script слишком длинный для совместного использования в сообщении, я размещу его на своем Google Диске.

Установка script (с новыми строками и комментариями):

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

script с комментариями:

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

Обязательно используйте версию без комментариев. Версия комментария занимает около 5 минут для запуска и заканчивается неудачей по какой-либо причине, в то время как разделенная версия занимает менее 5 секунд для запуска.

Примечание. Для этого вам, вероятно, нужно будет работать как root.