Respostas:
Isso acontecerá se você não carregou a tabela de fuso horário no mysql.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Eu encontrei este tópico depois de passar algum tempo tentando descobrir por que, após executar o comando na resposta aceita (que é a mesma no site dev do MySQL), o comando não conseguiu converter entre fusos horários como
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Acontece que no OS X existem dois arquivos que causam problemas: /usr/share/zoneinfo/Factory
e /usr/share/zoneinfo/+VERSION
.
A correção ... mover temporariamente esses arquivos para um local diferente, como /usr/share/zoneinfo/.bak/
permite o comando
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
para preencher totalmente todas as informações de fuso horário esperadas.
Isso pode ou não ser um bug em minha versão instalada do MySQL:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Também estou operando em STRICT_MODE
.
Em qualquer caso, espero que isso evite algumas dores de cabeça para quem está procurando a solução.
Além do ambiente Windows, você pode definir o fuso horário por
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Em ambiente 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
(ou seja, C: \ Arquivos de programas \ MySQL \ data \ mysql) `
4. Start MySQL server
..Seu trabalho acabou ..
Se ainda assim você está recebendo NULL
para CONVERT_TZ
download dessas tabelas de banco de dados e inseri-lo no banco de dados mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
Agora seu problema será resolvido .. :)
Se você estiver usando o MySql no Windows, terá que carregar os dados de fuso horário no esquema mysql. Aqui está um bom COMO FAZER: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
Se você não fizer isso, a função CONVERT_TZ não reconhecerá seu fuso horário de entrada (ou seja, seus exemplos: 'UTC', 'Ásia / Jacarta') e simplesmente retornará NULL.
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/
1) No Windows, não há nenhuma pasta de dados agora C:\Program Files\MySQL\
como nas outras respostas.
2) Nesse caso, procure C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql
. Geralmente esta pasta está oculta e você não verá C:\ProgramData\
algumas vezes.
3) Altere as configurações na guia Exibir para ver os arquivos e pastas ocultos, conforme explicado aqui https://irch.info/index.php?pg=kb.page&id=133
4) Pare o serviço MySQL procurando por "serviços" no botão Iniciar do Windows.
5) Em seguida, descompacte timezone_2017c_posix.zip e copie os arquivos nele (copie os arquivos diretamente, não copie a pasta inteira) e cole
C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\
6) Para MySQL 5.7, timezone_2017c_posix.zip fornecerá apenas um arquivo .sql após descompactar e pode não resolver o problema. Então vá em frente e baixe o arquivo zip para 5.6, mesmo se você estiver executando o MySQL 5.7 e copie esses arquivos paraC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\
7) Reinicie o servidor MySQL. Para verificar se CONVERT_TZ () está funcionando, execute esta consulta sql.
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta');
e verifique se há saída não nula.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
se você receber o erro data too long for column 'abbreviation' at row 1
, consulte: https://bugs.mysql.com/bug.php?id=68861
a correção seria executar o seguinte
isso adicionará uma linha para desativar o modo mysql e permitir que o mysql insira dados truncados devido a um bug do mysql onde o mysql adicionaria um caractere nulo no final (de acordo com o link acima)
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
Estas são as etapas para que funcione se você estiver no Windows e usando o MySQL 5.7.
mysql -u root -p password
.use mysql
para selecionar o banco de dados MySQL.Após a conclusão bem-sucedida, você poderá usar CONVERT_TZ
outras funções de fuso horário.
No Mac OS Catalina ao usar XAMPP,
Vá para a pasta / Applications / XAMPP / xamppfiles / bin no Terminal e execute o seguinte.
./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Fuso horário local deve ser definido - consulte a página de manual zic / local /" | ./mysql -u root mysql
Isso funcionou para mim.