我正在将数据库从PostgresSql迁移到MySql。
我们将数据库中的文件保存为PostgreSQL bytea列。我编写了一个脚本来导出bytea数据,然后将数据作为blob插入到新的MySql数据库中。数据正好插入Mysql,但它在应用程序级别不起作用。但是,应用程序不应该关心,因为数据完全相同。我不确定有什么问题,但我觉得MySql和PostgreSQL之间存在一些区别。任何帮助将不胜感激。
答案 0 :(得分:0)
这可能是一些问题,但我可以提供一些关于在sql供应商之间转换二进制数据的技巧。
您需要注意的第一件事是每个sql数据库供应商使用不同的转义字符。我怀疑您的二进制数据导出使用十六进制,并且在导入新数据库时很可能有不需要的转义字符。
我最近不得不这样做。导出的二进制数据为十六进制,并包含供应商特定的转义字符。
在新数据库中,检查二进制数据的文本值是以“x”还是异常编码开头。如果确实如此,你需要摆脱这个。由于您已经正确插入数据,因此要进行测试,您只需编写一个sql脚本,即可从新数据库中的每个导入二进制数据记录中删除任何不需要的供应商特定转义字符。最后,您可能需要unhex
每个新记录。
所以,这样的事情对我有用:
UPDATE my_example_table
SET my_blob_column = UNHEX(SUBSTRING(my_blob_column, 2, CHAR_LENGTH(my_blob_column)))
注意:SUBSTRING函数中的
2
是因为导出脚本 使用十六进制并在'\ x'前面加上特定于供应商的转义字符。
我不确定这对你有用,但也许值得一试。