我有很多记录,其中文本被存储在MySQL中的blob中。为了方便处理,我想改变数据库的格式为文本…有什么想法可以轻松地进行更改,从而不中断数据-我猜它将需要正确编码?
当前回答
或者你可以使用这个函数:
DELIMITER $$
CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$
DELIMITER ;
其他回答
我不明白为什么不那么容易:
UUID_TO_BIN('77dea2ad-3c8c-40c6-a278-7cf1a1ac9384')
and
BIN_TO_UUID(FIELD)
我也遇到过同样的问题,下面是我的解决方案:
在表中为每个blob列创建文本类型的新列 将所有blob转换为文本并保存在新列中 删除blob列 将新列重命名为已删除列的名称
修改mytable 添加字段field1_new文本不为空, ADD COLUMN field2_new TEXT NOT NULL 更新mytable set field1_new = CONVERT(field1 USING utf8), field2_new = CONVERT(field2 USING utf8); 修改mytable 删除列field1, 删除列field2; 修改mytable 修改字段field1_new field1文本, 修改字段field2_new field2文本;
SELECCT TO_BASE64(blobfield)
FROM the Table
为我工作。
CAST(blobfield AS CHAR(10000) CHARACTER SET utf8)和CAST(blobfield AS CHAR(10000) CHARACTER SET utf16)没有显示我想要得到的文本值。
我的MariaDB记录也有同样的问题。 这是(我的同事)用
select
uncompress(blobfield)
from table
下面是一个想用UTF-8编码将一个blob转换为char(1000)的例子:
CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)
这是他的答案。你可以在这里读到更多关于CAST的内容。我希望这能有所帮助。
推荐文章
- django test app error -在创建测试数据库时出现错误:创建数据库的权限被拒绝
- MySql: Tinyint (2) vs Tinyint(1) -有什么不同?
- 在Android SQLite中处理日期的最佳方法
- 如何在MySQL表中移动列?
- 在MySQL中选择最后一行
- 如何删除MySQL root密码
- 在SQL Server中查找重复的行
- 从DateTime中提取小时(SQL Server 2005)
- LEFT OUTER JOIN如何返回比左表中存在的记录更多的记录?
- 如何用SQL语句计算百分比
- Postgres唯一约束与索引
- SQL Server动态PIVOT查询?
- MySQL对重复键更新在一个查询中插入多行
- 向现有表添加主键
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在