我有很多记录,其中文本被存储在MySQL中的blob中。为了方便处理,我想改变数据库的格式为文本…有什么想法可以轻松地进行更改,从而不中断数据-我猜它将需要正确编码?


当前回答

我不明白为什么不那么容易:

UUID_TO_BIN('77dea2ad-3c8c-40c6-a278-7cf1a1ac9384')

and

BIN_TO_UUID(FIELD)

其他回答

我的MariaDB记录也有同样的问题。 这是(我的同事)用

select
uncompress(blobfield)
from table

下面是一个想用UTF-8编码将一个blob转换为char(1000)的例子:

CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)

这是他的答案。你可以在这里读到更多关于CAST的内容。我希望这能有所帮助。

这些答案对我都没用。当转换为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中检查二进制值。右击字段->在查看器中打开值->二进制。当转换回二进制时,二进制值应该与原始值相同。

或者,你也可以使用base-64,这是为了这个目的:

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))

如果您使用的是MYSQL-WORKBENCH,那么您可以正常地选择blob列,然后右键单击列,然后在编辑器中单击打开值。请参考截图:

SELECCT TO_BASE64(blobfield)  
FROM the Table

为我工作。

CAST(blobfield AS CHAR(10000) CHARACTER SET utf8)和CAST(blobfield AS CHAR(10000) CHARACTER SET utf16)没有显示我想要得到的文本值。