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字符串)版本中的事实仅确认了此最大字符限制.