golang에서 mysql로 연결할 때 `unknown time zone: Asia/Seoul`이라는 오류가 계속 뜸
-
이게 mysql에서 문제로 생각을 했었는데, 사실은 ubuntu에 Asia/Seoul zone info가 없어서 발생한 문제였음…
- 어쩐지 호스트에서 도커로 접속하면 되고, 동일한 코드가 리눅스에서는 안된다 싶더라니…
-
코드
// github.com/go-sql-driver/mysql@v1.5.0/dsn.go:451 // connection string을 파싱해서 옵션들을 만들어내는 함수 parseDSNParams case "loc": if value, err = url.QueryUnescape(value); err != nil { return } cfg.Loc, err = time.LoadLocation(value) if err != nil { return }
// time/zoneinfo_read.go:529 // parserDSNParams의 time.LoadLocation 함수가 마지막에 호출한다. // 이 함수는 Asia/Seoul 형식의 타임존 이름을 파싱하고, 시스템에서 값을 불러온다. 없다면 unknown time zone XXXX/XXXX 의 오류를 반환한다. func loadLocation(name string, sources []string) (z *Location, firstErr error) { for _, source := range sources { var zoneData, err = loadTzinfo(name, source) if err == nil { if z, err = LoadLocationFromTZData(name, zoneData); err == nil { return z, nil } } if firstErr == nil && err != syscall.ENOENT { firstErr = err } } if loadFromEmbeddedTZData != nil { zonedata, err := loadFromEmbeddedTZData(name) if err == nil { if z, err = LoadLocationFromTZData(name, []byte(zonedata)); err == nil { return z, nil } } if firstErr == nil && err != syscall.ENOENT { firstErr = err } } if firstErr != nil { return nil, firstErr } return nil, errors.New("unknown time zone " + name) }