【问题标题】:Audit Trigger, Insert Blob As LongText审核触发器,将 Blob 插入为 LongText
【发布时间】:2014-11-02 04:12:30
【问题描述】:

我正在尝试创建一个审核触发器,将 blob 数据作为长文本数据类型插入。

当我使用 select 时,我看到了图像的内容,但是当我使用相同的格式插入时,它显示为空白。

作品:数据显示图片的原始内容

select cast(my_image as char) as data from MyTable

不起作用:数据列显示为空白(0 字节)

insert into MyAuditTable (data) values ( cast(NEW.my_image as char) )

更新:9 月 12 日 我试图通过一个函数希望通过显式指定类型来实现它,但是那里也没有运气

CREATE FUNCTION `BLOB2TXT`(dablob LONGBLOB) RETURNS LONGTEXT 
    NO SQL
    DETERMINISTIC
BEGIN
       RETURN CAST(dablob AS CHAR CHARACTER SET utf8); 
END

如果有人想看看或想使用我拥有的东西,我在 github 上发布了我的项目。随时欢迎你:)

https://github.com/hotmit/mysql-sp-audit

现在唯一给我希望的是 Hex(blob) 但是当我 UNHEX() 时数据不可读。

【问题讨论】:

  • 你用CONVERT()试过了吗?
  • 我尝试按原样进行投射、转换、插入。所有这些都以空白结尾。
  • 请说明您的 github 项目中哪个表代表 MyTable 以及哪些字段是 date, my_image ?看什么文件?
  • "MyTable" 只是一个测试表,它在我的 github 项目中不存在。基本上我想转换图像并将其存储在 zaudit_meta 的 old_value 列中。
  • @DuD。 - 在看到这篇文章之前,我刚刚看到了你的 github 仓库。试了一下,并按预期工作。非常感谢您的宝贵时间。也为你的仓库加注星标!

标签: mysql sql triggers


【解决方案1】:

您可以尝试以下方法:

INSERT INTO zaudit_meta(audit_id, col_name)
SELECT 0
    ,CAST(my_image AS CHAR)

如果您的 SELECT 查询正常工作,则此解决方案应该可以工作。

希望这会有所帮助。

【讨论】:

  • Joël,我试过了,但我仍然得到一个空的 varchar 字段。
  • @DuD。您能否确认,如果您删除我的查询的 INSERT 语句,您会得到想要的结果吗?
  • Joël,当我使用 select 时,它会按预期显示内容。
  • @DuD。这很奇怪。您能否确认我在运行我的查询时没有错误
  • @DuD。您能否尝试用硬编码的CHAR 值替换我的CAST 语句并告诉我插入是否正确完成?如果没有,提供MyAuditTable 表的结构及其上的活动约束会很有用。
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 2016-09-18
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多