尽管我的字符串在范围内,但类型字符变量(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)的值太长的主要内容,如果未能解决你的问题,请参考以下文章
Python Django psycopg2.errors.StringDataRightTruncation:类型字符的值太长
org.postgresql.util.PSQLException:错误:对于类型字符变化的值太长(255)
Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)