IDNA转换域名的最大长度是多少?

9 dns database-design punycode maxlength idn

首先要做的事情:

在我将每个域名转换为IDNA版本之后,我将多个域存储到数据库中.我需要知道这样一个IDNA转换域名的最大长度,以便我可以定义数据库字段的最大长度.

已知事实:

现在,我知道域名(包括任何子域)中的最大字符数为255个字符.

我输了的地方:

乍一看这很容易,但是......这是否意味着国际字符的常规ascii字符(想想UTF-8编码)?

举个例子:当我忽略"ü"是一个需要更多字节来表示的国际字符时,域"müller.de"有9个字符."müller.de"的IDNA版本是"xn--mller-kva.de",有16个字符.这表明最大长度肯定存在差异,具体取决于"if"是否转换为IDNA.

根据它们的含义,最多255个字符可以是国际字符版本,IDNA转换版本,甚至两者.

这就是我失去它的地方......特别是,因为我必须考虑到并非所有领域都是理智的,像"öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäéèê.test.äöüßüöäéèê.com"这样的东西,更糟糕的是被期望.

因此,"猜测"和"希望最好"不是一种选择.我需要确定...

问题是:

基于已知的事实,即域名(包括任何子域)中的最大字符数是255个字符... IDNA转换的域名的最大长度是多少?

或者他们是否意味着IDNA转换版本(punycode)也限制为255个字符(这意味着具有国际/ unicode字符的域实际上在其unicode表示中具有更短的限制,因为他们的IDNA转换版本将必须尊重255个字符限制)?

小智 7

好吧,我想我发现自己和我发现的这个片段(通过搜索互联网)帮助:

基本上有两种不同的选择可用于引入国际化域名(IDN).第一种是对域名系统(DNS)进行调整,以允许直接使用unicode字符.人们认为这是一个过于激烈的措施,因此选择了第二种选择.这涉及编译算法以指定如何将unicode字符串转换为允许的ASCII域名.然后将此ACE字符串(ACE代表ASCII兼容编码)输入DNS.IDN的引入意味着,DNS中的条目第一次不再与域名相同.

- 来源

答案是,尊重的长度是DNS期望的255个字符限制.

我的怀疑是正确的.域名和DNS中的条目是IDN的两个不同的东西.这是DNS条目的最大长度.

域名"müller.de"有9个字符,但相应的ACE(ASCII兼容编码)字符串"xn--mller-kva.de"却有16个字符.

它是DNS使用的ACE字符串,它是低于255个字符限制的ACE字符串.这意味着它的unicode(域)版本的最大限制是由使用的unicode字符数定义的,如果 - 在IDNA转换后 - 字符串仍然符合255个字符的限制.

Geez,对于这样的事情,规格肯定会更加清晰.特别是因为国际域名自2004年3月1日附近出现以来一直存在.但我找到了答案,这才是最重要的.

也许这可以帮助那些有同样问题的人.

与我的数据库字段长度相关的简单答案是255个CHAR.

我将域名存储在其IDNA转换(punycode/ACE字符串)版本中的事实仅确认了此最大字符限制.

  • 呸,谁在数秒?我只会接受你的答案而不是我自己的答案。我至少可以为你的努力回报你一些东西。猜猜我今天有社交情绪... :) (2认同)
  • @JJC添加了引文的源文章,引用了相关的RFC. (2认同)

cmb*_*ley 6

我的理解是在IDNA转换后要考虑255个字符的限制.

这是因为DNS记录具有此字符限制,并且通常DNS记录只能包含字母,数字和连字符(来自维基百科).因此,DNS服务器使用IDN的Punycode版本作为其记录,而不是Unicode版本.