10.6 MySQL Server에서 시간대 지원
MySQL Server는 여러 시간대 설정을 보유하고 있습니다.
시스템 시간대. 서버는 시작할 때 호스트 시스템의 시간대를 파악하고이를 사용하여
system_time_zone
시스템 변수로 설정하려고합니다. 그 후,이 값은 변경하지 않습니다.mysqld_safe에
--timezone=
옵션을 사용하면 부팅시 MySQL Server의 시스템 시간대를 설정할 수 있습니다. mysqld를 시작하기 전에timezone_name
TZ
환경 변수를 설정하여 설정할 수도 있습니다.--timezone
또는TZ
에 허용되는 값은 시스템에 따라 다릅니다. 허용 가능한 값을 확인하려면 운영 체제 설명서를 참조하십시오.서버의 현재 시간대.
time_zone
글로벌 시스템 변수는 서버가 현재 운영하고있는 시간대를 나타냅니다.time_zone
의 초기 값은'SYSTEM'
이며, 이것은 서버의 타임 존이 시스템 타임 존과 동일하다는 것을 보여줍니다.명령 행에서
--default-time-zone=
옵션을 사용하면 초기 글로벌 서버 시간대 값을 시작할 때 명시 적으로 지정할 수 있습니다. 또는 옵션 파일에서 다음 줄을 사용할 수 있습니다.timezone
default-time-zone = '
timezone
'SUPER
권한이있는 경우 런타임에 다음 문을 사용하면 서버 시간대의 글로벌 값을 설정할 수 있습니다.mysql>
SET GLOBAL time_zone =
timezone
;연결 당 시간대. 연결하는 각각의 클라이언트는
time_zone
세션 변수에 지정된 각 시간대 설정이 있습니다. 첫 세션 변수는time_zone
글로벌 변수에서 값을 가져옵니다 만, 클라이언트는 다음 문을 사용하여 각각의 시간대를 변경할 수 있습니다.mysql>
SET time_zone =
timezone
;
현재 세션의 시간대 설정 영역을 구별하는 시간 값의 표시 및 저장에 영향을줍니다. 여기에는 NOW()
이나 CURTIME()
등의 함수로 표시되는 값과 TIMESTAMP
컬럼에 저장하고 거기에서 읽을 값도 포함됩니다. TIMESTAMP
컬럼 값은 저장 될 때 현재의 시간대에서 UTC로 읽기는 UTC에서 현재의 시간대로 변환됩니다.
현재 표준 시간대 설정은 UTC_TIMESTAMP()
와 같은 함수가 표시되는 값 또는 DATE
, TIME
, DATETIME
컬럼 값에는 영향을주지 않습니다. 또한 이러한 데이터 형의 값도 UTC로 저장되지 않습니다. 시간대는 TIMESTAMP
값에서 변환하는 경우에만 적용됩니다. DATE
, TIME
또는 DATETIME
값에 로케일 고유의 연산을 수행하는 경우 이러한 값을 UTC로 변환하여 연산을 수행 한 후 원래로 변환 다시합니다.
글로벌 및 클라이언트 고유의 타임 존의 현재 값은 다음과 같이 얻을 수 있습니다.
mysql> SELECT @@global.time_zone, @@session.time_zone;
timezone
값은 다음의 여러 형식으로 지정 가능하며 대소 문자를 구분하지 않습니다.
'SYSTEM'
값은 시간대를 시스템 타임 존과 같게 할 필요가 있음을 나타냅니다.이 값은
'+10:00'
또는'-6:00'
등 UTC 오프셋을 나타내는 문자열로 지정할 수 있습니다.이 값은
'Europe/Helsinki'
,'US/Eastern'
''MET'
등의 이름있는 시간대로 지정할 수 있습니다. 명명 된 시간대는mysql
데이터베이스의 시간대 정보 테이블이 만들어 이입 된 경우에만 사용할 수 있습니다.
MySQL의 설치 절차는 mysql
데이터베이스에 시간대 테이블을 만들지 만, 이것들을로드하지 않습니다. 다음 단계를 사용하여 수동으로 작업을 수행해야합니다. (이전 버전에서 MySQL 4.1.3 이상으로 업그레이드하려면 mysql
데이터베이스를 업그레이드하여 테이블을 만들 수 있습니다. 섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 의 절차를 사용하십시오 테이블을 생성 한 후에로드 할 수 있습니다.)
정보는 변경 될 수 있으므로 시간대 정보로드는 반드시 한 번만 작업은 아닙니다. 예를 들어, 미국, 멕시코, 일부 캐나다 서머 타임 규칙은 2007 년에 변경되었습니다. 이러한 변경이 발생한 경우 이전 규칙을 사용하여 응용 프로그램은 구식이되어 MySQL Server에서 사용되는 정보를 최신 상태로 유지하기 위해 표준 시간대 테이블을 다시로드해야 할 수 있습니다 . 이 섹션의 마지막 노트를 참조하십시오.
시스템 자체 zoneinfo 데이터베이스 (시간대 대해 말했다 파일 세트)이있는 경우, 시간대 테이블에 입력하기 위해 mysql_tzinfo_to_sql 프로그램을 사용해야합니다. 이러한 시스템은 Linux, FreeBSD, Solaris OS X 등이 있습니다. 이러한 파일의 하나의 적절한 위치는 /usr/share/zoneinfo
디렉토리입니다. 시스템에 zoneinfo 데이터베이스가없는 경우이 섹션 뒷부분의 다운로드 가능한 패키지를 사용할 수 있습니다.
mysql_tzinfo_to_sql 프로그램은 시간대 테이블의로드에 사용됩니다. 명령 행에서 zoneinfo 디렉토리의 경로 이름을 mysql_tzinfo_to_sql에 전달하고 출력을 mysql 프로그램에 보냅니다. 예 :
shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
mysql_tzinfo_to_sql은 시스템 타임 존 파일을 읽고 해당 파일에서 SQL 문을 생성합니다. mysql은 이러한 문을 처리하여 시간대 테이블을로드합니다.
mysql_tzinfo_to_sql를 사용하면 단일 타임 존 파일을로드하거나 윤초 정보를 생성 할 수 있습니다.
시간대 이름
tz_name
에 대응 한 단일 시간대 파일tz_file
을로드하려면 다음과 같이 mysql_tzinfo_to_sql를 호출합니다.shell>
mysql_tzinfo_to_sql
tz_file
tz_name
| mysql -u root mysql이 방식은 서버가 인식하는 이름이있는 영역에 대해 별도의 명령을 실행 시간대 파일을로드해야합니다.
시간대가 윤초에 대응할 필요가있는 경우는 다음과 같이 윤초의 정보를 초기화합니다. 여기에서
tz_file
시간대 파일의 이름입니다.shell>
mysql_tzinfo_to_sql --leap
tz_file
| mysql -u root mysqlmysql_tzinfo_to_sql를 실행 한 후 이전에 캐시 된 모든 시간대 데이터를 계속 사용하지 않도록 서버를 다시 시작하는 것이 좋습니다.
zoneinfo 데이터베이스 (Windows 등)을 포함하지 않는 시스템의 경우, MySQL Developer Zone에서 다운로드 할 수있는 사전 구축 된 표준 시간대 테이블의 패키지를 사용할 수 있습니다.
http://dev.mysql.com/downloads/timezones.html
이 시간대 패키지는 MyISAM
타임 존 테이블 용으로 .frm
, .MYD
, .MYI
등의 파일이 포함되어 있습니다. 이러한 테이블을 mysql
데이터베이스의 일부가 될 필요가 있기 때문에 파일을 MySQL Server의 데이터 디렉토리의 mysql
서브 디렉토리에 넣어주세요. 서버를 중지하고 작업을 수행, 그 후에 다시 시작합니다.
시스템에 zoneinfo 데이터베이스가있는 경우는 다운로드 가능한 패키지를 사용하지 마십시오. 대신 mysql_tzinfo_to_sql 유틸리티를 사용하십시오. 그렇지 않으면, MySQL 및 시스템의 다른 응용 프로그램간에 일시 처리에 차이가 발생할 수 있습니다.
복제 설정 시간대 설정의 자세한 내용은 섹션 17.4.1 "복제 기능 및 문제" 를 참조하십시오.