MySQL 在尝试向 BLOB 字段插入字节时尝试应用 UTF-8 编码

标签 mysql utf-8 blob

我正在使用 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,
 (...)
);

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

错误 1366:第 1 行“Body”列的字符串值不正确:“\x8B\x08\x00\x00\x00\x00...”

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

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

最佳答案

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

BLOB 没有字符集。只要您能够通过解析器获取字节,就不会有问题。

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

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

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

关于MySQL 在尝试向 BLOB 字段插入字节时尝试应用 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49827662/

相关文章:

mysql - 在这种情况下,选择的排序规则重要吗?

javascript - 我可以设置在 Chrome 中显示的 PDF 对象的文件名吗?

mysql - 依赖子查询 v 左连接

MySQL 使用 utf8_general_ci 对 Ä 和 Ö 进行排序

asp.net-mvc-3 - 禁用 ASP.NET-MVC3 中 unicode 字符的编码

javascript - 使用 JavaScript/Typescript 从服务器下载文件

html - 检测本地视频是否可以在html5中播放?

java - java中的DateTimePicker格式

mysql --quick 选项

javascript - 当使用 ajax 获取 php 文件时,使用来自另一个文件的 PHP 变量