我正在同步大量数据,但是我收到了这个错误:字符串字面值不能包含 NUL(0x00)字符。
很显然,这是一个 postgres 问题,但我不太确定该如何解决。是否有一种方法可以在 Django 模型层级别上剔除空字符?我有一大堆字段需要同步。
我正在同步大量数据,但是我收到了这个错误:字符串字面值不能包含 NUL(0x00)字符。
很显然,这是一个 postgres 问题,但我不太确定该如何解决。是否有一种方法可以在 Django 模型层级别上剔除空字符?我有一大堆字段需要同步。
这个bug修复建议:
s.decode("utf-8", errors="replace").replace("\x00", "\uFFFD")
对于OP的问题,只需要使用.replace
方法来替换null为一个�字符。我也包含了.decode
方法,因为它可以保护在类似情况下可能出现的其他编码问题。
如果你想要全局应用这个方法,可以将其放在.clean
方法中,或者在TextField或CharField子类中实现。
除非你确实想要存储NUL字符,否则应该对文本进行清理以使其不包含它们。在模型层面,你可以定义一个clean_fieldname
方法来完成这个任务。
如果你确实想要存储它们,你需要将它们存储在数据库中的二进制兼容字段中。Django 1.6+具有BinaryField
,应该可以胜任。
NUL
字符终止。您要在数据库中存储什么?如果要存储二进制数据,应将其存储在BinaryField
中:https://docs.djangoproject.com/en/2.2/ref/models/fields/#binaryfield - Willem Van Onsem