【问题标题】:Laravel 5.5 - How to suppress MySQL Database Truncation warning messageLaravel 5.5 - 如何抑制 MySQL 数据库截断警告消息
【发布时间】:2019-03-11 21:44:25
【问题描述】:

我搜索了 Laravel 文档和堆栈以查看是否提到了这一点,但没有发现其他提及。

有没有办法配置 Laravel 应用程序来禁止显示附件等数据库警告消息?

此特定错误表明 spatie/laravel-activitylog 应用正在记录一个被截断的更改。有问题的“属性”字段的类型为:TEXT。

在初始事务(编辑本身)周围放置一个 try/catch 不会捕获错误消息。

想法?

如果任何特定代码 sn-ps 有帮助,请告诉我,我会更新这篇文章。

【问题讨论】:

  • 如何修复而不是试图隐藏错误
  • 这个错误,由日志包抛出,是这里唯一“损坏”的东西,它不是我的包。我的模型表的实际更新发生在非常长的 base64 字符串中。 activity_log 表也得到了被截断的行,所以除了硬故障之外,似乎没有任何故障。
  • 这有什么关系,抑制错误而不是修复它们是不好的做法。

标签: php mysql laravel activitylog


【解决方案1】:

不幸的是,我不熟悉这个包。然而,快速扫描他们的Github 告诉我,它看起来是一个可以在配置中设置的模型,用于将这些数据存储到数据库中。

建议特别使用Eloquent eventssaving,因为这将在creatingupdating 时触发。

在此事件的回调函数中,您可以截断模型的特定属性。在这种情况下,如果我没记错的话,那将是 properties 属性。

您似乎正在尝试存储一些 base64 字符串,并且猜测可能是这导致了问题。也许您可以对properties 的内容进行正则表达式,并将所有src="somereallylongbase64" 替换为src="...base64...",以防止使用简单的全局链接properties 丢失大部分重要数据。

【讨论】:

    【解决方案2】:

    这不是警告吗?这是一个例外,因为您的插入语句试图在“属性”列中插入大量数据。

    您可能不想抑制这种类型的消息(并且可能无法抑制潜在的错误),您需要通过使列适合更多数据或使用其他一些保存机制来修复它(如果它很多)您正在保存的数据。

    【讨论】:

      【解决方案3】:

      您好,很抱歉参加聚会迟到了。要抑制截断警告,只需将其放入 CAST 中即可。

      例子:

      -- With decimal(4, 1) (too many decimal places throws a warning but doesn't throw an
      -- exception unlike having too high a number would):
      INSERT INTO sysmon.temperatures VALUE (NOW(), CAST(46594/1000 AS DECIMAL(4,1)), 36.5);
      -- Mysql: Process run is green!
      
      -- With VARCHAR(400) (when too many characters throws a warning before truncating):
      INSERT INTO website.blog_comments VALUE (NOW(), CAST('some really long string' AS VARCHAR(400)));
      -- Mysql: You're the boss!
      

      TEXT 的工作方式与上面的 VARCHAR 示例类似。

      【讨论】:

        【解决方案4】:

        spatie/laravel-activitylog 使用您的模型$fillable 属性来了解要记录哪些属性并将它们记录在activity_log 表的properties 列下。

        检测将在 MySQL 中截断的属性并将其包含到模型中的 $logAttributesToIgnore 属性中:

        public static $logAttributesToIgnore = [];
        

        如果您坚持记录该属性,您应该创建一个迁移并将properties 列从TEXT 更改为MEDIUMTEXT 或更大。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-17
          • 2012-02-09
          相关资源
          最近更新 更多