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