我有很多记录,其中文本被存储在MySQL中的blob中。为了方便处理,我想改变数据库的格式为文本…有什么想法可以轻松地进行更改,从而不中断数据-我猜它将需要正确编码?
当前回答
这些答案对我都没用。当转换为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))
其他回答
我的MariaDB记录也有同样的问题。 这是(我的同事)用
select
uncompress(blobfield)
from table
我不明白为什么不那么容易:
UUID_TO_BIN('77dea2ad-3c8c-40c6-a278-7cf1a1ac9384')
and
BIN_TO_UUID(FIELD)
这些答案对我都没用。当转换为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列,然后右键单击列,然后在编辑器中单击打开值。请参考截图:
你可以很容易地做到。
ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
上面的查询对我很有用。我希望它也能帮助到你。
推荐文章
- 如何关闭mysql密码验证?
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- MySQL区分大小写查询
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- MySQL数据库表中的最大记录数
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- PHP/MySQL插入一行然后获取id
- 我如何循环通过一组记录在SQL Server?
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N