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

时间:2013-05-21 18:12:01

标签: python django string unicode flask

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不确定我是否遗漏了某些东西,但是你可以从200字节中获得的最长(unicode)字符串是200个字符。

但是,最小长度是一个不同的问题。

根据编码('UTF-8','UTF-16','latin-1',...),每个unicode代码点需要1到4个字节(例如'character')。因此,虽然长度为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个字节。