将数据从mysql插入postgres时出现以下错误.
我是否必须手动删除输入数据中的所有空字符?有没有办法让postgres为我这样做?
ERROR: invalid byte sequence for encoding "UTF8": 0x00
Run Code Online (Sandbox Code Playgroud)
Mag*_*der 52
PostgreSQL不支持在文本字段中存储NULL(\ 0x00)字符(这显然不同于完全支持的数据库NULL值).
资料来源:http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE
如果需要存储NULL字符,则必须使用bytea字段 - 该字段应存储您想要的任何内容,但不支持对其进行文本操作.
鉴于PostgreSQL在文本值中不支持它,没有好办法让它删除它.您可以将数据导入到bytea中,然后使用特殊函数将其转换为文本(在Perl或其他内容中,可能?),但在加载之前预处理可能会更容易.
小智 17
只需正则表示空字节:
s/\x00//g;
Run Code Online (Sandbox Code Playgroud)
Dav*_*sco 12
如果您使用的是Java,则可以在插入之前替换x00字符,如下所示:
myValue.replaceAll("\u0000", "")
Run Code Online (Sandbox Code Playgroud)
Csaba在以下帖子中提供并解释了该解决方案:
https://www.postgresql.org/message-id/1171970019.3101.328.camel%40coppola.muc.ecircle.de
分别:
在Java中,你的字符串中实际上可以有一个"0x0"字符,这是有效的unicode.所以它被转换为UTF8中的字符0x0,而后者又不被接受,因为服务器使用空终止字符串...所以唯一的方法是确保你的字符串不包含字符'\ u0000'.
| 归档时间: |
|
| 查看次数: |
83252 次 |
| 最近记录: |