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

Database design IDNA转换域名的最大长度是多少?,database-design,dns,maxlength,idn,punycode,Database Design,Dns,Maxlength,Idn,Punycode,第一件事优先: 在将每个域名转换为IDNA版本后,我将多个域存储到一个数据库中。我需要知道IDNA转换域名的最大长度,以便定义数据库字段的最大长度 已知事实: 现在,我知道一个域名(包括任何子域)的最大字符数是255个字符 我把它弄丢的地方: 乍一看很容易,但是。。。这是否意味着国际字符的常规ascii字符(比如UTF-8编码) 举个例子:域“müller.de”有9个字符,而我忽略了“ü”是一个需要更多字节来表示的国际字符。IDNA版本的“müller.de”是“xn--mller.de”,它

第一件事优先:

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

已知事实:

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

我把它弄丢的地方:

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

举个例子:域“müller.de”有9个字符,而我忽略了“ü”是一个需要更多字节来表示的国际字符。IDNA版本的“müller.de”是“xn--mller.de”,它有16个字符。这表明,根据IDNA转换与否,最大长度肯定存在差异

根据它们所指的字符类型,255个字符的最大值可以是国际字符版本、IDNA转换版本,甚至两者都可以

这就是我失去它的地方。。。特别是,因为我必须考虑到,并非所有的域名都是健全的,像“encample.äü223;üäüäääääääääääääääääääääääää

因此,“猜测”和“希望最好”不是一种选择。我需要确切地知道

问题是:

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


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

好,我想我发现了自己,我(通过搜索互联网)发现的这段代码有助于:

引入国际化域名(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字符串,并且ACE字符串不超过255个字符的限制。这意味着它的unicode(域)版本的最大限制是由使用的unicode字符数定义的,并且如果在IDNA转换后字符串仍然符合255个字符的限制

天啊,这类东西的规格肯定会更清晰一些。尤其是当国际域名在2004年3月1日左右出现时。但我找到了答案,这才是最重要的

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

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


事实上,我将域名存储在其IDNA转换(punycode/ACE string)版本中只确认了这个最大字符限制。

我的理解是,在IDNA转换后,255个字符的限制将被视为

这是因为DNS记录有此字符限制,通常DNS记录只能包含字母、数字和连字符()。因此,DNS服务器使用IDN的Punycode版本作为其记录,而不是Unicode版本。

说明了os IDNA编码的一个功能:

高效编码:基本字符串长度与扩展字符串长度之比 字符串长度很小。这在以下情况下很重要: 域名,因为它限制了 域标签长度为63个字符


就是这样。63个字符是任何域名的最大长度,不考虑它是IDNA还是ASCII。

我在检查了一些注册网站及其关于“带重音和Umlauts的域名”的信息后得出了相同的结论。是的,换算后是255。但是谢谢你的回复。这意味着我不是唯一一个得出相同结论的人,这是一件让人放松的事情呸,谁在数秒?我只接受你的答案,而不是我自己的。这是我能做的最起码的事,为了你的努力,我能给你一些回报。我想我今天的心情很好…:)@JJC为引用添加了源文章,其中引用了相关的RFC。@cbuckley如果我因为“有偿工作”而迟到,有一个僚机就好了。当你能看到在这样一个社区工作的积极成果时,stackoverflow就变得更有价值了。向上投票;)DNS名称限制实际上是253个字符,而不是255个字符-可能还值得注意的是,每个子域限制为63个字符,这也将在Punycode转换后计算。。。这是对域名中单个标签的限制,而不是对整个域名的限制