Convert_tz возвращает null

Я знаю, что это звучит глупо, но когда я использую

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

выводится NULL. Я использую MySQL Workbench в Ubuntu 12.04 64 бит, и он работает в моем другом ноутбуке /os (также с использованием MySQL Workbench).

Ответ 1

Это произойдет, если вы не загрузили таблицу часовых поясов в mysql.

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

Ответ 2

Я нашел этот поток, потратив некоторое время на то, чтобы выяснить, почему после запуска команды в принятом ответе (что то же самое на сайте 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.

В любом случае, я надеюсь, что это спасет несколько головных болей для всех, кто ищет исправление.

Ответ 3

Помимо среды 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

Теперь проблема будет решена..:)

Ответ 4

Если вы используете MySql в Windows, вам нужно загрузить данные о часовом поясе в схему mysql. Вот хороший HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

Если вы этого не сделаете, функция CONVERT_TZ не будет распознавать ваш часовой пояс ввода (например, ваши примеры: "UTC", "Азия/Джакарта" ) и просто вернет NULL.

Ответ 5

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

Ответ 6

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/

Ответ 7

Это шаги, чтобы заставить его работать, если вы находитесь в Windows и используете MySQL 5.7.

  • Щелкните правой кнопкой мыши Мой компьютер/Компьютер/Этот ПК или любое другое имя в вашей ОС и выберите "Свойства".
  • Выберите "Дополнительные системные настройки" на левой панели.
  • Выберите "Экологические переменные", введите полное имя вашего каталога bin bin (обычно оно будет в C:\Program Files\MySQL\MySQL Server 5.7\bin).
  • Откройте приглашение cmd, введите в mysql с помощью mysql -u root -p password.
  • Введите use mysql, чтобы выбрать БД MySQL.
  • Загрузите файл "timezone_2017c_posix_sql.zip" из https://dev.mysql.com/downloads/timezones.html.
  • Извлеките его и откройте файл в текстовом редакторе.
  • Скопировать содержимое и выполнить в командной строке.

При успешном завершении вы сможете использовать CONVERT_TZ и другие функции часового пояса.