我有很多记录,其中文本被存储在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 ;
其他回答
你可以很容易地做到。
ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
上面的查询对我很有用。我希望它也能帮助到你。
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的内容。我希望这能有所帮助。
这是不必要的。只需使用SELECT CONVERT(column USING utf8) FROM.....而不是只是SELECT column FROM…
推荐文章
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 如何从命令行在windows中找到mysql数据目录
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的
- 如何找到MySQL的根密码
- 如何改变字符集(和排序)在整个数据库?
- mySQL:: insert到表,数据从另一个表?
- 重复键忽略?
- 如何在Postgres中获得两个字段的MIN() ?
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中
- 将表从一个数据库复制到另一个数据库的最简单方法?
- 如何在SQL中选择表的最后一条记录?
- SQL在Oracle中连接多行列值的查询