Ответ 1
Строки часовых поясов, такие как America/Halifax
и Asia/Kolkata
ссылаются на записи в так называемой базе данных zoneinfo. Прочитай это. https://www.iana.org/time-zones. В настоящее время он поддерживается Управлением по присвоению номеров в Интернете. Он сильно меняется, потому что его сопровождающий старается идти в ногу с изменениями в правилах перехода на летнее время и другими политическими вопросами.
В UNIX-подобных системах записи хранятся в иерархии каталогов файловой системы, а не по какому-либо кодовому номеру. Это успешная реализация моего предложения. Вы можете посмотреть, как это работает.
Вы спрашивали:
Хранить ли целую строку
America/Los_Angeles
Да.
есть какой-то целочисленный идентификатор для него?
Нет, если вы хотите, чтобы ваше приложение и база данных были ориентированы на будущее. В части MySQL есть time_zone_id, который содержит данные zoneinfo, но никто не дал никаких обещаний о том, чтобы сохранить эти цифры без изменений.
Самая длинная строка в текущей базе данных (2019b) - America/Argentina/ComodRivadavia
. Это 32 символа в длину. Таблица mysql.time_zone_name
имеет столбец Name
определенный из 64 символов. Имеет смысл использовать VARCHAR(64)
для хранения этой информации; это соответствует тому, как имена хранятся в системе.
Кстати, WordPress предлагает пользователю список выбора (выпадающий список) доступных имен часовых поясов и сохраняет выбор пользователя в виде текста. Это отличный пример для подражания.