Pregunta convert_tz devuelve nulo


Sé que esto suena estúpido, pero cuando uso

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

Emite NULL. Estoy usando MySQL Workbench en Ubuntu 12.04 64 bit, y funciona en mi otra laptop / os (también usando MySQL Workbench).


73
2018-01-22 08:25


origen


Respuestas:


Esto sucederá si no ha cargado la tabla de zona horaria en mysql.

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

132
2018-01-22 08:37



Encontré este hilo después de pasar algún tiempo tratando de descubrir por qué después de ejecutar el comando en la respuesta aceptada (que es la misma en el sitio dev de MySQL) el comando no pudo convertir entre zonas horarias como

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

Resulta que en OS X hay dos archivos que causan problemas: /usr/share/zoneinfo/Factory y /usr/share/zoneinfo/+VERSION.

La solución ... mover temporalmente estos archivos a una ubicación diferente, como /usr/share/zoneinfo/.bak/ permite el comando

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

para completar completamente toda la información de la zona horaria esperada.

Esto puede o no ser un error en mi versión de MySQL instalada:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

También estoy operando en STRICT_MODE.

En cualquier caso, espero que esto ahorre algunos dolores de cabeza a cualquiera que busque la solución.


23
2017-08-13 17:01



Además del entorno de Windows, puede establecer la Zona horaria

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

En Windows ambiente,

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 (es decir, C: \ Archivos de programa \ MySQL \ data \ mysql) `

4. Start MySQL server

.. Tu trabajo ha terminado ..

Si todavía estás recibiendo NULL para CONVERT_TZ  Descargue estas tablas de base de datos e insértelas en la base de datos mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Ahora tu problema será resuelto ... :)


11
2018-03-15 09:10



Si está utilizando MySql en Windows, debe cargar los datos de la zona horaria en el esquema de mysql. Aquí hay un buen HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

Si no lo hace, la función CONVERT_TZ no reconocerá su zona horaria de entrada (es decir, sus ejemplos: 'UTC', 'Asia / Yakarta'), y simplemente devolverá NULL.


2
2018-02-27 03:28



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

si obtiene el error data too long for column 'abbreviation' at row 1 luego ver: https://bugs.mysql.com/bug.php?id=68861

la solución sería ejecutar lo siguiente

esto agregará una línea para deshabilitar el modo mysql y permitir a mysql insertar datos truncados esto fue debido a un error mysql donde mysql agregaría un carácter nulo al final (de acuerdo con el enlace de arriba)

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
2018-02-23 14:07



Estos son los pasos para hacerlo funcionar si está en Windows y está usando MySQL 5.7.

  1. Haga clic derecho en Mi PC / Computadora / Esta PC o cualquiera que sea el nombre en su SO y elija Propiedades.
  2. Elija "Configuración avanzada del sistema" en el panel izquierdo.
  3. Elija "Variables ambientales", ingrese la ruta completa de su directorio bin MySQL (generalmente estará en, C: \ Archivos de programa \ MySQL \ MySQL Server 5.7 \ bin).
  4. Abra el indicador de cmd, ingrese en mysql usando mysql -u root -p password.
  5. Entrar use mysql para seleccionar el DB MySQL.
  6. Descargue el archivo "timezone_YYYYc_posix_sql.zip" (en lugar de YYYY, sustituya el año máximo disponible en esa página, como 2017 o 2018) de https://dev.mysql.com/downloads/timezones.html.
  7. Extraelo y abre el archivo en el editor de texto.
  8. Copia los contenidos y ejecuta en el prompt cmd.

En la finalización exitosa, debe poder usar CONVERT_TZ y otras funciones de zona horaria.


1
2017-12-04 17:24



MAMP PRO

  1. Abierto 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/

0
2017-11-14 05:44



1) En Windows, no hay ninguna carpeta de datos ahora en C:\Program Files\MySQL\ como en otras respuestas.

2) En ese caso, busque C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. En general, esta carpeta oculta y no verá C:\ProgramData\ a veces.

3) Cambie la configuración en la pestaña Ver para ver los archivos y carpetas ocultos como se explica aquí https://irch.info/index.php?pg=kb.page&id=133

4) Detenga el servicio MySQL buscando "servicios" en el botón de Inicio de Windows.

5) A continuación, descomprima timezone_2017c_posix.zip y luego copie los archivos en él (copie los archivos directamente, no copie la carpeta completa) y pegue C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) Para MySQL 5.7, timezone_2017c_posix.zip solo dará un archivo .sql después de descomprimir y puede que no resuelva el problema. Así que adelante y descargue el archivo zip para 5.6 incluso si está ejecutando MySQL 5.7 y copie esos archivos a C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\ 

7) Reinicia el servidor MySQL. Para verificar si CONVERT_TZ () está funcionando, ejecute esta consulta SQL.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta');  y verifique la salida no nula.


0
2018-01-12 23:08