【问题标题】:Implicit conversion from data type varchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query不允许从数据类型 varchar(max) 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询
【发布时间】:2018-06-07 00:56:46
【问题描述】:

我在开发中使用 MySQL,将 base64 图像存储为 longblob 数据类型。

但是在我将数据库更改为 MS SQL 并将数据类型更改为 varbinary(max) 后尝试插入数据时出现以下错误

不允许从数据类型 varchar(max) 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询

所以我放了一个 mutator 来解决这个问题,如下所示,

public function setItemPictureAttribute($value)
{
    $this->attributes['item_picture'] = DB::raw('CONVERT(VARBINARY(MAX), "'. $value .'")');
}

但在尝试存储 base64 图像时出现以下错误;

以“/9j/4QxnRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAAAAAAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdp”开头的标识符过长。最大长度为 128`

我错过了什么?

编辑:我改成$this->attributes['item_picture'] = DB::raw("CONVERT(VARBINARY(MAX), '". $value ."')");后不知何故得到了这项工作;请注意,我在DB::raw 中将双引号换成了单引号,反之亦然。也许有人可以解释原因

【问题讨论】:

  • 我改成$this->attributes['item_picture'] = DB::raw("CONVERT(VARBINARY(MAX), '". $value ."')");后不知何故得到了这项工作;请注意,我在DB::raw 中将双引号换成了单引号,反之亦然。
  • 发布您自己问题的答案并将其标记为最佳答案以将其从未回答队列中删除可能是个好主意:)
  • @sulaimansudirman 我在使用存储过程时遇到了同样的问题。你能否告诉我你最终是如何编写查询来克服这个问题的。我认为 Laravel 中的存储过程不会通过模型。

标签: sql-server laravel varbinarymax


【解决方案1】:

我换成后不知怎么得到了这个工作

$this->attributes['item_picture'] = DB::raw("CONVERT(VARBINARY(MAX), '". $value ."')");; 

请注意,我在DB::raw 中将双引号换成了单引号,反之亦然。也许有人可以解释原因

【讨论】:

    最近更新 更多