我已经从 MySQL 数据库转换为 Postgres。在转换过程中,Postgres中的图片列被创建为bytea。
此 Xojo 代码适用于 MySQL 但不适用于 Postgres。
Dim mImage as Picture
mImage = rs.Field("Picture").PictureValue
有什么想法吗?
最佳答案
我不知道这个特定问题,但您可以通过以下方法自行了解,也许:
图片在数据库中存储为 BLOB。现在,这意味着该列也必须声明为 BLOB(或类似的二进制类型)。如果它不小心被标记为 TEXT,只要数据库没有通过其他方式导出,这就可以工作。也就是说,只要您的 Xojo 代码使用 PictureValue 函数读取和写入记录,它就会负责将数据保持为 BLOB 形式。但是,如果您随后转换到另一个数据库,BLOB 数据将被读取为文本,并且在该过程中它可能会被破坏。
因此,让我们知道您如何转换数据库可能很重要。您是否执行了导出为 SQL 命令,然后通过再次运行这些命令将其导入到 Postgres 中?你还有导出文件吗?如果是这样,找到一个包含图片数据的记录,看看该数据是否以:x'开头,然后包含十六进制字节代码,例如x'45FE1200...等等。如果不是,那是我怀疑的另一个指标。
因此,请先检查旧数据库中图片列的类型。如果指定二进制数据类型,则上述内容可能不适用。
接下来,您可以查看 Xojo 读取的实际二进制数据。为此,获取 BlobValue 而不是 PictureValue,并将其存储在 MemoryBlock 中。对单个图片执行相同的操作,同时使用旧数据库和新数据库。内存块应包含相同的字节。如果不是,则表明数据未正确传输。为什么?好吧,这取决于您如何转换它。
关于mysql - 图片使用Postgres和Xojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22506663/