Сохранение часового пояса в базе данных

Я буду использовать MySQL и PHP и вам нужно будет сохранить часовой пояс в БД. Потратьте немного на него, и мне кажется, что мне нужно использовать что-то вроде America/Los_Angeles, а не PST, Pacific Standard Time, PST8PDT, +02.00 и т.д.

Сохраняю ли я целую строку America/Los_Angeles, или для нее существует какой-то идентификатор целого числа, например qaru.site/info/481489/... для С#? Если какая строка, каково максимальное количество символов?

Ответ 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 предлагает пользователю список выбора (выпадающий список) доступных имен часовых поясов и сохраняет выбор пользователя в виде текста. Это отличный пример для подражания.

http://www.iana.org/time-zones

Ответ 2

Проверьте здесь MySql DateTime

MySQL преобразует значения TIMESTAMP из текущего часового пояса в UTC для хранения и обратно из UTC в текущий часовой пояс для извлечения. (Это не происходит для других типов, таких как DATETIME.) По умолчанию текущим часовым поясом для каждого соединения является время сервера. Часовой пояс может быть установлен для каждого соединения отдельно. Пока настройка часового пояса остается постоянной, вы получаете то же значение, которое храните.

Вы должны добавить новый столбец в вашу таблицу, чтобы сохранить ваш часовой пояс, а при извлечении информации конвертировать ваш часовой пояс.