将图像从MSSQL导入PostgreSQL

时间:2014-05-14 01:30:57

标签: php sql-server database image postgresql

我在csv中有一组从MSSQL导入的图像。文件大小为1GB。 MSSQL中的数据类型是图像。当我想导入Postgres时,bytea中的数据类型出错。

  

错误:编码“UTF8”的无效字节序列:0xff
  背景:复制照片,第1行

当我查看csv文件时,图像文件位于

0xFFD8FFE000104A46494600010101006000600000FFE1...

我的问题:

  1. 可以使用PostgreSQL中的哪种数据类型导入此类文件?
  2. 如何使用Postgres和PHP从这种类型的文件中检索图像?
  3. 我尝试过的解决方案:

    1. 我尝试只复制三行并保存到新的csv文件,将其导入照片表,然后成功。很奇怪,为什么当我想导入整个csv表时,发生了错误。
    2. 我在我的php中使用示例图像尝试了这个https://stackoverflow.com/a/22211207/3602791并且它很成功,但是当我想要检索我导入的三行图像时,它说我的图像有错误。
    3. http://pastebin.com/WrfjFqY6这是csv中的一行代码。 2列,id和照片。

      任何人都知道如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

正如yenyen在评论中指出的那样,问题是输入是UCS-2(可能真的是UTF-16)编码。

UCS-2是一个每字符两个字节的编码,包含空字节。如果你告诉PostgreSQL文件是utf-8那么它会看到输入为垃圾填充无效的utf-8序列。如果你告诉PostgreSQL它是一个简单的1字节编码,比如latin1,PostgreSQL会看到零(null)字节,并意识到它毕竟不是latin-1。

这里的技巧是使用可以显示原始字节的编辑器检查输入文件,而不仅仅是使用自动读取BOM并将其作为编码文本加载的文本编辑器。如果有疑问,请使用十六进制编辑器。