Ни один из этих ответов не работал для меня. При преобразовании в UTF8, когда кодировщик встречает набор байтов, он не может преобразовать в UTF8, это приведет к? замена, которая приводит к потере данных. Вам нужно использовать UTF16:
SELECT
blobfield,
CONVERT(blobfield USING utf16),
CONVERT(CONVERT(blobfield USING utf16), BINARY),
CAST(blobfield AS CHAR(10000) CHARACTER SET utf16),
CAST(CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) AS BINARY)
Вы можете проверить двоичные значения в MySQL Workbench. Щелкните правой кнопкой мыши по полю -> Открыть значение в Viewer-> Binary. При преобразовании обратно в BINARY двоичные значения должны совпадать с исходными.
В качестве альтернативы, вы можете просто использовать base-64, который был сделан для этой цели:
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))
SELECT CONVERT(column USING utf8) FROM table;