mysql在尝试向blob字段插入字节时尝试应用utf-8编码

c7rzv4ha  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(449)

我使用的是mysql 8.0.4(rc4),我需要mysql 8,因为它是mysql唯一支持ctes的版本。
我的数据库是这样创建的:

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 .
这是我正在使用的insert语句。

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不意味着我可以插入任何东西吗?

tmb3ates

tmb3ates1#

怎么回事 : 什么东西?为什么有嵌套查询?我们可以看看实际的sql吗?你用什么语言?这听起来像是“绑定”试图应用字符集规则,而实际上不应该。我们可以看看替换 : 什么东西? BLOBs 没有字符集。只要你能让字节通过解析器,就不会有问题。
但是,我发现这是一个更好的方法。。。
在应用程序语言中,生成一个十六进制字符串,然后在

INSERT INTO ... VALUES (..., UNHEX(the-hex-string), ...)

相关问题