【问题标题】:How do I insert binary data into a DB using Laravel?如何使用 Laravel 将二进制数据插入数据库?
【发布时间】: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


【解决方案1】:

你可以使用 DB::unprepared($code); 要么 DB::插入()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2012-07-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多