2

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

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

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

4

2 回答 2

1

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

于 2013-05-21T19:06:07.247 回答
1

不确定我是否遗漏了什么,但从 200 个字节中可以得到的最长(unicode)字符串是 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 个字节。

于 2013-05-21T19:06:27.237 回答