Ответ 1
Это произойдет, если вы не загрузили таблицу часовых поясов в mysql.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Я знаю, что это звучит глупо, но когда я использую
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
выводится NULL. Я использую MySQL Workbench в Ubuntu 12.04 64 бит, и он работает в моем другом ноутбуке /os (также с использованием MySQL Workbench).
Это произойдет, если вы не загрузили таблицу часовых поясов в mysql.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Я нашел этот поток, потратив некоторое время на то, чтобы выяснить, почему после запуска команды в принятом ответе (что то же самое на сайте dev) MySQL не удалось выполнить преобразование между часовыми поясами, такими как
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Оказывается, на OS X есть два файла, которые вызывают проблемы: /usr/share/zoneinfo/Factory
и /usr/share/zoneinfo/+VERSION
.
Исправление... временное перемещение этих файлов в другое место, например /usr/share/zoneinfo/.bak/
, позволяет выполнить команду
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
чтобы полностью заполнить всю ожидаемую информацию о часовом поясе.
Это может быть или не быть ошибкой в моей установленной версии MySQL:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Я также работаю в STRICT_MODE
.
В любом случае, я надеюсь, что это спасет несколько головных болей для всех, кто ищет исправление.
Помимо среды Windows, вы можете установить часовой пояс на
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
В среде Windows,
1. download Time zone description tables from
http://dev.mysql.com/downloads/timezones.html
2. Stop MySQL server
3. Put then inside Mysql installation package
(т.е. C:\Program Files\MySQL\data\mysql) `
4. Start MySQL server
.. Ваша работа закончена.
Если вы все еще получаете NULL
для CONVERT_TZ
Загрузите эти таблицы базы данных и вставьте их в базу данных mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
Теперь проблема будет решена..:)
Если вы используете MySql в Windows, вам нужно загрузить данные о часовом поясе в схему mysql. Вот хороший HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
Если вы этого не сделаете, функция CONVERT_TZ не будет распознавать ваш часовой пояс ввода (например, ваши примеры: "UTC", "Азия/Джакарта" ) и просто вернет NULL.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
если вы получите сообщение об ошибке data too long for column 'abbreviation' at row 1
затем посмотрите: https://bugs.mysql.com/bug.php?id=68861
исправление будет состоять в следующем
это добавит строку для отключения режима mysql и позволит mysql вставлять усеченные данные это было из-за ошибки mysql, в которой mysql добавит нулевой символ в конце (в соответствии с приведенной выше ссылкой)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(if the above gives error "data too long for column 'abbreviation' at row 1")
mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql
echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql
cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql
mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql
MAMP PRO
Terminal
cd /usr/share/zoneinfo/
sudo mv +VERSION ~/Desktop
cd /applications/MAMP/Library/bin
sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/
Это шаги, чтобы заставить его работать, если вы находитесь в Windows и используете MySQL 5.7.
mysql -u root -p password
.use mysql
, чтобы выбрать БД MySQL.При успешном завершении вы сможете использовать CONVERT_TZ
и другие функции часового пояса.