第一件事:
在将每个域名转换为其 IDNA 版本之后,我将多个域存储到数据库中。我需要知道这样一个 IDNA 转换的域名可以具有的最大长度,以便我可以定义数据库字段的最大长度。
已知事实:
现在,我知道域名(包括任何子域)中的最大字符数是 255 个字符。
我丢的地方:
乍一看很容易,但是……这是否意味着国际字符的常规 ascii 字符(想想 UTF-8 编码)?
举个例子:当我忽略“ü”是一个需要更多字节来表示的国际字符时,域“müller.de”有 9 个字符。“müller.de”的 IDNA 版本是“xn--mller-kva.de”,它有 16 个字符。这表明最大长度肯定存在差异,具体取决于“是否”它是否被 IDNA 转换。
根据它们所指的字符类型,最多 255 个字符可能是国际字符版本、IDNA 转换版本,甚至两者兼而有之。
这就是我失去它的地方......尤其是,因为我必须考虑到并非所有域都是理智的,并且像“öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäéèêê.test.äöüßüöäéèêêê.com”之类的东西更糟糕的是被期望。
因此,“猜测”和“希望最好”不是一种选择。我需要确定...
问题是:
基于已知的事实,域名(包括任何子域)中的最大字符数为 255 个字符...... IDNA 转换域名的最大长度是多少?
或者他们是否意味着 IDNA 转换版本(punycode)也被限制为 255 个字符(这意味着具有国际/unicode 字符的域实际上在其 unicode 表示中的限制更短,因为他们的 IDNA 转换版本必须尊重 255 个字符限制)?