最长200字节字符串-数据库验证max_length



因此,按照最终用户/应用程序提供的给定变量(200字节)指定字节长度的规范工作。

使用python字符串,字符串的最大字符长度是多少,它满足200字节,因此我可以指定我的数据库字段的max_length设置?

(同样,我可能在字节-unicode转换中遗漏了一些东西!)

取决于编码。UTF-32总是使用4个字节的字符,UTF-8对英语文本使用单个字节,对大多数欧洲语言使用两个字节,但对数学符号,中文/日语等可以使用多达四个字节。所以,最有可能的是200字节足以容纳任何50个字符长的字符串……除非存在每个字符5字节的编码(?):)

不确定我是否错过了什么,但最长的(unicode)字符串你可以得到200字节是200个字符。

最小长度是另一个问题。

根据编码('UTF-8', 'UTF-16', 'latin-1',…),每个unicode码点('character',例如😞)需要1到4个字节。因此,虽然长度为200的未编码字符串可以编码为200字节:

len(u'a'*200)== 200 == len((u'a'*200).encode('UTF-8'))

你也可以得到更长的字节串:

len(u'a'*200)== 200 < 804 len((u'a'*200).encode('UTF-32'))  # includes a byte-order-mark and 4 bytes per char

因此,根据所使用的编码,作为unicode字符串,您的200字节应该至少有50个码点。

因此,如果您想将字段长度指定为unicode字符串并让数据库处理编码,200就足够了,以字节为单位取决于源编码。如果在UTF-8中解码和重新编码,例如日文编码的字节串可能会变长。我认为最坏的情况是从UTF-8(每个字节一个字符)的ascii字符串变为UTF-32(每个字符4个字节,加上字节顺序标记),导致如上所述的804字节。

最新更新