我正在使用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意味着我可以插入任何字面上的东西吗?
答案 0 :(得分:0)
什么是:
的东西?为什么有嵌套查询?我们可以看到实际的SQL吗?你用的是什么语言?听起来像“绑定”试图应用字符集规则,当它不应该。我们可以看到代替:
东西的代码吗?
BLOBs
没有字符集。只要你能通过解析器得到字节,就没有问题。
但是,我觉得这是一个更好的方法......
在app语言中,生成一个十六进制字符串,然后在
中使用它 INSERT INTO ... VALUES (..., UNHEX(the-hex-string), ...)