функция Convert возвращает значение null ТЗ


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

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

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

8 74

8 ответов:

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

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

Я нашел этот поток, потратив некоторое время, пытаясь выяснить, почему после запуска команды в принятом ответе (что то же самое на сайте разработчика 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 Скачать эти базы данных таблицы и вставить его в базу данных mysqlhttp://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','Asia/Jakarta') и просто вернет 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

1) в Windows теперь нет никакой папки данных в C:\Program Files\MySQL\ как и в другие ответы.

2) в таком случае ищите C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Вообще эта папка скрыта и вы ее не увидите C:\ProgramData\ несколько раз.

3) измените настройки на вкладке Вид, чтобы увидеть скрытые файлы и папки, как описано здесь https://irch.info/index.php?pg=kb.page&id=133

4) остановите службу MySQL, выполнив поиск "services" в кнопке запуска Windows.

5) Затем распакуйте timezone_2017c_posix.zip, а затем скопируйте файлы в него (скопируйте файлы напрямую, не копируйте всю папку) и вставьте C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) для MySQL 5.7, timezone_2017c_posix.zip будет просто дать .sql-файл после распаковки и он не может решить проблему. Так что вперед и загрузите zip-файл для 5.6, даже если вы используете MySQL 5.7 и скопируйте эти файлы в C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7) перезапустите сервер MySQL. Чтобы проверить, работает ли CONVERT_TZ (), запустите это sql запрос.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); и проверьте ненулевой выход.

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

  1. щелкните правой кнопкой мыши на моем компьютере / компьютере / этом ПК или любом другом имени в вашей ОС и выберите Свойства.
  2. выберите "Дополнительные параметры системы" на левой панели.
  3. выберите "Переменные среды", введите полный путь к каталогу MySQL bin (как правило, он будет в, C:\Program Files\MySQL\MySQL Server 5.7\bin).
  4. открыть командную строку , войдите в mysql с помощью mysql -u root -p password.
  5. введите use mysql для выбора базы данных MySQL.
  6. загрузите файл " timezone_YYYYc_posix_sql.zip " (вместо YYYY, замените максимальный год, доступный на этой странице, например, 2017 или 2018) от https://dev.mysql.com/downloads/timezones.html.
  7. распакуйте его и откройте файл в текстовом редакторе.
  8. скопируйте содержимое и выполните в командной строке.

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

MAMP PRO

  1. открыть Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/