也就是说,我的数据库中的
timezone
列可以有latin1
编码吗?
了解这一点很重要,因为时区标识符将来自用户设备,如果标识符中使用非 ASCII 字符,数据库将抛出错误。
另一方面,拥有
latin1
字符集和 latin1_bin
排序规则会稍微提高数据库性能,特别是对于索引列。
时区标识符示例:
America/Los_Angeles
、Australia/Sydney
。
似乎找不到权威来源可以说“是的,它们总是 ASCII”。
我认为问题评论中的人只是迂腐,因为您询问的是“所有”时区标识符而不是 IANA 标识符。 还有其他方案,但如今并未广泛使用。
至于 IANA 标识符 - 是的,它们必须是 ASCII,实际上所有其他要求都将字符保持在 7 位数字范围内。
来自 https://data.iana.org/time-zones/theory.html
仅使用有效的 POSIX 文件名组件(即名称中除“/”之外的部分)。请勿使用文件名组件“.”和 '..'。在文件名组件中,仅使用 ASCII 字母、“.”、“-”和“_”。不要使用数字,因为这可能会导致 POSIX.1-2017 TZ 字符串产生歧义。文件名组成部分不得超过 14 个字符或以“-”开头。例如,与 America/Fernando_de_Noronha 相比,更喜欢 America/Noronha。例外:请参阅下面对旧名称的讨论。
但继续迂腐一点,IANA 标识符在技术上也不是“标准”。 它们由社区(tz 邮件列表)维护,而不是由标准机构(例如 ISO、ECMA、IETF 等)维护。 它们恰好无处不在,足以被视为“事实上的”标准。