尽管我的字符串在范围内,但类型字符变量(x)的值太长

Posted

技术标签:

【中文标题】尽管我的字符串在范围内,但类型字符变量(x)的值太长【英文标题】:Value too long for type character varying(x) though my string is within range 【发布时间】:2021-10-28 20:07:12 【问题描述】:

我正在使用 phonenumber_field 来存储电话号码。

phone_number = PhoneNumberField(blank=False, max_length=12)

我也刚刚从 sqlite db 切换到 postgres,还运行了 makemigrations 和 migrate。 sqlite db 可以工作,但是对于 postgresql,我不断收到此错误“对于类型字符变化 (x) 而言值太长”,即使我正在保存一个包含在 max_length 要求内的字符串的实例。

这些是我的 phonenumber_field 设置

PHONENUMBER_DB_FORMAT = "NATIONAL"
PHONENUMBER_DEFAULT_REGION = "US"

我创建对象并将其保存到 db

# string length is 10 but settings above add "+1" to front when value is saved 
obj = User(..., phone_number='xxxxxxxxxx')
obj.save()

【问题讨论】:

sqlite 不考虑将 phone_code 作为字段的一部分,而 postgres 则考虑,在这种情况下,您应该增加字段的 max_length @UdayYadav 我尝试将 max_length 增加到 13,它只是返回相同的错误,但它不是 12,而是说 ...varying(13) 【参考方案1】:

我想通了。

如果您收到此错误,您应该在跟踪错误时检查局部变量。对我来说,我发现当我的电话号码被保存时,它是用括号保存的,所以它实际上超过了 12 个字符的限制。

我想保存:+13434344343 这是12个字符

但它是这样保存的:(343) 434-4343 is 14 chars long

我不得不更改我的 Django settings.py

PHONENUMBER_DB_FORMAT = "E164"
PHONENUMBER_DEFAULT_REGION = "US"

【讨论】:

以上是关于尽管我的字符串在范围内,但类型字符变量(x)的值太长的主要内容,如果未能解决你的问题,请参考以下文章

对于长度为 100000 的类型字符变化(255)的值太长

Python Django psycopg2.errors.StringDataRightTruncation:类型字符的值太长

org.postgresql.util.PSQLException:错误:对于类型字符变化的值太长(255)

DatabaseError:类型字符变化的值太长(100)

Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)

尽管在类中声明了变量,但无法在范围内找到