convert_tz는 null을 반환합니다.


92

이게 어리석은 소리라는 건 알지만

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

NULL을 출력합니다. Ubuntu 12.04 64 비트에서 MySQL Workbench를 사용하고 있으며 다른 랩톱 / OS에서 작동합니다 (MySQL Workbench도 사용).

답변:


173

이것은 시간대 테이블을 mysql에로드하지 않은 경우에 발생합니다.

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

1
이 작업을 한 번만 수행해야합니까, 아니면 MySql이 시작될 때마다 수행해야합니까?
Abe Miessler

3
딱 한번. 이 정보를 테이블에로드하여 MySQL로 가져 가면 그때부터 사용됩니다.
Barmar 2013-08-13

2
force 플래그를 사용하여 발생한 오류도 무시할 수 있습니다. mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
(데비안에서) MySQL 데몬이 적용되기 전에 MySQL 데몬도 다시 시작해야했습니다.
Ekster 2014

2
안녕하세요,이 명령을 실행할 때 다음과 같은 오류가 발생했습니다. 경고 : '/usr/share/zoneinfo/iso3166.tab'을 시간대로로드 할 수 없습니다. 건너 뛰는 중입니다. 경고 : '/usr/share/zoneinfo/zone.tab'을 시간대로로드 할 수 없습니다. 건너 뛰는 중입니다.
Ghanshyam Katriya 2015 년

26

허용 된 답변 (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.

어쨌든, 나는 이것이 수정을 찾는 사람에게 몇 가지 두통을 덜어주기를 바랍니다.


13

Windows 환경과는 별도로 다음과 같이 시간대를 설정할 수 있습니다.

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

에서 윈도우 환경,

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 다운로드 MySQL 데이터베이스에이 데이터베이스 테이블과 삽입을 http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

이제 문제가 해결됩니다 .. :)



2

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/

바이너리 폴더의 위치 외에는 일반적으로 macOS에 적용됩니다. 감사!
colonelclick

2

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) Windows 시작 버튼에서 "서비스"를 검색하여 MySQL 서비스를 중지합니다.

5) 그런 다음 timezone_2017c_posix.zip의 압축을 푼 다음 파일을 복사하고 (파일을 직접 복사하고 전체 폴더 자체를 복사하지 마십시오) 붙여 넣습니다. C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) MySQL 5.7의 경우 timezone_2017c_posix.zip은 압축을 푼 후 .sql 파일 만 제공하며 문제를 해결하지 못할 수 있습니다. 따라서 MySQL 5.7을 실행하는 경우에도 5.6 용 zip 파일을 다운로드하고 해당 파일을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'); 널이 아닌 출력을 확인하십시오.


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

오류가 발생하면 https://bugs.mysql.com/bug.php?id=68861data too long for column 'abbreviation' at row 1 을 참조하십시오.

수정 사항은 다음을 실행하는 것입니다.

이것은 mysql 모드를 비활성화하는 줄을 추가하고 mysql이 잘린 데이터를 삽입하도록 허용합니다. 이것은 mysql이 끝에 null 문자를 추가하는 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

나는 OSX El Capitan을 가지고 있으며 이것이 작동하도록하는 유일한 대답입니다. 향후 참조를 위해 : 제 경우에는 "데이터가 너무 깁니다. 행 1의 '약어'열에 대한 데이터가 너무 깁니다." 참고 : 다른 답변에 언급 된 파일의 (sudo) mkdir 또는 (sudo) mv를 수행하려는 모든 노력은 'Permission denied'가됩니다
hepabolu

BTW MySQL을 다시 시작할 필요가 없었습니다.
hepabolu

1

다음은 Windows에서 MySQL 5.7을 사용하는 경우 작동하도록하는 단계입니다.

  1. 내 컴퓨터 / 컴퓨터 /이 PC 또는 OS의 이름을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 왼쪽 패널에서 "고급 시스템 설정"을 선택합니다.
  3. "환경 변수"를 선택하고 MySQL bin 디렉토리의 전체 경로 이름을 입력합니다 (일반적으로 C : \ Program Files \ MySQL \ MySQL Server 5.7 \ bin에 있음).
  4. cmd 프롬프트를 열고 mysql -u root -p password.
  5. use mysqlMySQL DB를 선택하려면 입력하십시오 .
  6. https://dev.mysql.com/downloads/timezones.html 에서 "timezone_YYYYc_posix_sql.zip"파일을 다운로드합니다 (YYYY 대신 해당 페이지에서 사용 가능한 최대 연도 (예 : 2017 또는 2018)로 대체) .
  7. 압축을 풀고 텍스트 편집기에서 파일을 엽니 다.
  8. 내용을 복사하고 cmd 프롬프트에서 실행하십시오.

성공적으로 완료되면 CONVERT_TZ및 기타 시간대 기능 을 사용할 수 있어야 합니다.


0

Mac OS Catalina에서 XAMPP를 사용할 때

터미널의 / Applications / XAMPP / xamppfiles / bin 폴더로 이동 한 후 다음을 실행하십시오.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / 로컬 시간대를 설정해야합니다. zic 매뉴얼 페이지 / local / 참조"| ./mysql -u 루트 mysql

이것은 나를 위해 일했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.