【问题标题】:MySQL trying to apply UTF-8 encoding when trying to insert bytes to BLOB fieldMySQL 在尝试将字节插入 BLOB 字段时尝试应用 UTF-8 编码
【发布时间】:2018-04-29 08:03:43
【问题描述】:

我正在使用 MySQL 8.0.4 (rc4) 我需要 MySQL 8,因为它是唯一支持 CTE 的 MySQL 版本。

我的数据库是这样创建的:

CREATE DATABASE IF NOT EXISTS TestDB
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
USE TestDB;
SET sql_mode = 'STRICT_TRANS_TABLES';
CREATE TABLE IF NOT EXISTS MyTable (
 (...)
 Body LONGBLOB NOT NULL,
 (...)
);

当我尝试将原始字节数据插入此描述字段时,我收到此错误:

Error 1366: Incorrect string value: '\x8B\x08\x00\x00\x00\x00...' for column 'Body' at row 1

这是我正在使用的插入语句。

REPLACE INTO MyTable
SELECT Candidate.* FROM
(SELECT :Id AS Id,
    (...)
    :Body AS Body,
    (...)
    ) AS Candidate
LEFT JOIN MyTable ON Candidate.Id = MyTable.Id
WHERE (
(...)
);

BLOB 的字符串值怎么可能不正确? BLOB 不是意味着我可以插入任何内容吗?

【问题讨论】:

  • 你能发布示例插入语句吗?
  • 刚刚添加了我正在使用的插入语句。

标签: mysql utf-8 blob


【解决方案1】:

: 是什么?为什么有嵌套查询?我们可以看到实际的 SQL 吗?您使用什么语言?听起来“绑定”试图应用字符集规则,但它不应该。我们可以看看替换 : 的代码吗?

BLOBs 没有字符集。只要你能通过解析器获取字节,应该没有问题。

但是,我发现这是一种更好的方法......

在应用程序语言中,生成一个十六进制字符串,然后在

中使用它
 INSERT INTO ... VALUES (..., UNHEX(the-hex-string), ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2012-03-15
    • 2013-09-01
    相关资源
    最近更新 更多