convert_tz devuelve nulo

93

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

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

genera NULL. Estoy usando MySQL Workbench en Ubuntu 12.04 de 64 bits, y funciona en mi otra computadora portátil / sistema operativo (también usando MySQL Workbench).

Mohur
fuente

Respuestas:

177

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
Barmar
fuente
1
¿Solo necesita hacer esto una vez o cada vez que se inicia MySql?
Abe Miessler
3
Sólo una vez. Carga la información en una tabla en MySQL, que se utiliza a partir de ese momento.
Barmar
2
También puede usar el indicador de fuerza para anular cualquier error que encuentre: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
escoria
3
También necesitaba reiniciar el demonio MySQL antes de que entrara en vigor (en Debian).
Ekster
2
Hola, cuando ejecuto este comando recibí un error como este: Advertencia: No se puede cargar '/usr/share/zoneinfo/iso3166.tab' como zona horaria. Omitiéndolo. Advertencia: No se puede cargar '/usr/share/zoneinfo/zone.tab' como zona horaria. Omitiéndolo.
Ghanshyam Katriya
26

Encontré este hilo después de pasar un tiempo tratando de averiguar por qué después de ejecutar el comando en la respuesta aceptada (que es el mismo en el sitio de desarrollo 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/Factoryy /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 toda la información esperada de la zona horaria.

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

$ 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 le ahorre algunos dolores de cabeza a cualquiera que busque la solución.

Jim Schubert
fuente
13

Aparte del entorno de Windows, puede configurar la zona horaria

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

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

4. Start MySQL server

.. Tu trabajo está terminado ..

Si aún está obteniendo NULLpara CONVERT_TZ descargar estas tablas de base de datos e insertarlas en la base de datos mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Ahora tu problema estará resuelto .. :)

Rakesh
fuente
2

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/
Jaseem Abbas
fuente
Aparte de la ubicación de la carpeta binaria, esto se aplica a macOS en general. ¡Gracias!
coronelclick
2

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

2) En ese caso, busque C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Generalmente esta carpeta está oculta y no veráC:\ProgramData\ algunas 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 Inicio de Windows.

5) Luego descomprima el timezone_2017c_posix.zip y luego copie los archivos en él (copie los archivos directamente, no copie toda la carpeta), y péguelo C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) Para MySQL 5.7, timezone_2017c_posix.zip solo dará un archivo .sql después de descomprimirlo y es posible que no resuelva el problema. Así que continúe y descargue el archivo zip para 5.6 incluso si está ejecutando MySQL 5.7 y copie esos archivos aC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

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

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

shanu
fuente
1
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

si recibe el error data too long for column 'abbreviation' at row 1 , consulte: 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á que mysql inserte datos truncados, esto se debió a un error de mysql donde mysql agregaría un carácter nulo al final (de acuerdo con el enlace anterior)

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
Timo Huovinen
fuente
Tengo OSX El Capitan y esta es la única respuesta para que funcione. Para referencia futura: en mi caso, el error indica: "Datos demasiado largos para la columna 'Abreviatura' en la fila 1". Nota: todos los esfuerzos para hacer (sudo) mkdir o (sudo) mv de los archivos mencionados en otras respuestas dan como resultado 'Permiso denegado'
hepabolu
Por cierto, no necesitaba reiniciar MySQL.
hepabolu
1

Estos son los pasos para que funcione si está en Windows y usa MySQL 5.7.

  1. Haga clic derecho en Mi PC / Computadora / Esta PC o cualquier nombre en su sistema operativo y elija Propiedades.
  2. Elija "Configuración avanzada del sistema" en el panel izquierdo.
  3. Elija "Variables ambientales", ingrese el nombre de ruta completo de su directorio bin de 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 la base de datos 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) desde https://dev.mysql.com/downloads/timezones.html .
  7. Extraerlo y abrir el archivo en el editor de texto.
  8. Copie el contenido y ejecútelo en el indicador de cmd.

Una vez completado con éxito, debería poder utilizar CONVERT_TZy otras funciones de zona horaria.

Desconocido
fuente
0

En Mac OS Catalina cuando se usa XAMPP,

Vaya a la carpeta / Aplicaciones / XAMPP / xamppfiles / bin en la Terminal y luego ejecute lo siguiente.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Se debe establecer la zona horaria local; consulte la página del manual de zic / local /" | ./mysql -u root mysql

Esto funcionó para mí.

Movimiento rápido del ojo
fuente