Php 设定长度

Php 设定长度,php,timezone,Php,Timezone,我想知道PHP中时区设置的最大长度是多少?我将字符串存储在数据库中,并希望尽可能缩短长度,但我看到“加拿大/东萨斯喀彻温省”这样的时区超出了我们当前的限制 如果我可以得到所有支持的时区字符串的列表,我可以对它们进行排序,但它们目前被拆分到几个不同的页面上 linky:来自: 编辑2021年6月答案是64。为什么?这是MySQL中用来存储那些时区名称字符串的列的宽度 那些时区字符串后面的字符串只是添加了新的前缀。在以前最长的时区字符串America/Argentina/ComodRivadavia

我想知道PHP中时区设置的最大长度是多少?我将字符串存储在数据库中,并希望尽可能缩短长度,但我看到“加拿大/东萨斯喀彻温省”这样的时区超出了我们当前的限制

如果我可以得到所有支持的时区字符串的列表,我可以对它们进行排序,但它们目前被拆分到几个不同的页面上

linky:

来自:


编辑2021年6月答案是64。为什么?这是MySQL中用来存储那些时区名称字符串的列的宽度

那些时区字符串后面的字符串只是添加了新的前缀。在以前最长的时区字符串
America/Argentina/ComodRivadavia
中,他们添加了
posix/America/Argentina/ComodRivadavia
right/America/Argentina/ComodRivadavia
,两者的长度均为38。这是之前最长的字符串32

下面是完整的PHP代码,可以找到:

<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();

$maxlen = 0;
foreach($timezone_identifiers as $id)
{
    if(strlen($id) > $maxlen)
        $maxlen = strlen($id);
}

echo "Max Length: $maxlen";

/*
Output:

Max Length: 32

*/
?>

奥尔森数据库(可从或处获得,但也可参见*和)是这些名称的来源。文件理论中的文档包括区域名称如何形成的描述。这将帮助您确定名称的长度

最长的“当前”名称为30个字符(美国/阿根廷/布宜诺斯艾利斯, 美国/阿根廷/里约加列戈斯、美国/北达科他州/新塞勒姆);最长的“向后兼容性”名称为32个字符(美国/阿根廷/科摩多里瓦达维亚)


>注意到TwitSun站点在一段时间内没有被更新,并且有一些过时的链接(例如,建议奥尔森数据库是可用的),它现在可以从IANA取而代之。

< P>如果您正在使用PHP使用MySQL,请考虑MySQL已经将奥尔森时区名称存储在“MySQL”系统数据库中,在一个被称为“表”的表中“time_zone_name”,在一个名为“name”的列中。一个选项是选择与MySQL使用的长度相匹配的列的长度。在MySQL 5.7中,时区名称长度为64个字符。要确定MySQL安装中使用的长度,请遵循以下示例:

mysql> use mysql
Database changed
mysql> describe time_zone_name;
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| Name         | char(64)         | NO   | PRI | NULL    |       |
| Time_zone_id | int(10) unsigned | NO   |     | NULL    |       |
+--------------+------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

重要的是要注意,OP将宽度设置为32将是一个巨大的错误。它应该设置得更高-以防万一。我以为答案是42-它不总是42吗?@Jonathan-我本来想这么说,但不想让OP使用它…:-)@karlw,如果你不知道,答案是42是指“生命的答案,从《搭便车者指南》到《银河系》的《宇宙和一切》。这本书的目的是为了好玩。)我今天跑了这段代码,最大长度为30,最长值
美国/阿根廷/布宜诺斯艾利斯
。感谢您成为一个热情的社区。
mysql> use mysql
Database changed
mysql> describe time_zone_name;
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| Name         | char(64)         | NO   | PRI | NULL    |       |
| Time_zone_id | int(10) unsigned | NO   |     | NULL    |       |
+--------------+------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)