【发布时间】:2014-04-11 19:56:16
【问题描述】:
我正在尝试使用 Laravel 4 及其 Eloquent ORM 将二进制数据插入 PostgreSQL 数据库。我在迁移中有以下内容:
Schema::create('DataBlobs', function($table) {
$table->increments('Id');
$table->binary('Data');
});
运行迁移后,我已验证它创建了一个 PostgreSQL BYTEA 列。伟大的!所以我把它放在一个数据库播种函数中:
DB::table('DataBlobs')->delete();
// $d contains the binary data I want to insert into the database.
$d = base64_decode($raw_b64data);
$i = new DataBlob();
$i->Data = $d;
$i->save();
但是,当我运行该播种机时,我收到以下错误:
SQLSTATE[22021]:字符不在曲目中:7 错误:用于编码“UTF8”的字节序列无效:0x89(SQL:插入“DataBlobs”(“Data”)值(我的控制台尝试的二进制乱码渲染)
我已经使用 var_dump 和 bin2hex 验证了 $d 实际上是一个包含我想要的数据的二进制字符串,但是从错误来看,Laravel 正在尝试将二进制数据插入为 UTF8 字符串而不是 as二进制数据。我已经在谷歌上搜索了一天,但找不到任何关于如何使用 Laravel 将二进制数据插入数据库的示例。任何帮助将不胜感激!
【问题讨论】:
-
我发现我可以使用 '\\xDEADBEEF' 格式的十六进制字符串插入二进制数据,但是如果字符串超过 4678 个字符(包括 \x 前缀的 4680 个字符),它会静默失败并且二进制数据不会与其余数据一起存储。我在这里束手无策。我真的要依靠向 PostgreSQL 发出手动查询并绕过 Laravel 的数据库功能吗? :(
-
希望以下资源对您有所帮助:MySQL BLOB and PostgreSQL Bytea are not alternatives
标签: php postgresql laravel