Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串

Symfony, Doctrine truncates string in Json filed before storing in database

在 Symfony 4 应用程序中使用 Doctrine 存储数据库中的某些 Json 数据时,我遇到了一个奇怪的错误。

json 数据中的某些字符串被截断超过 27 个字符并在末尾添加 [...],但并非总是如此 !!

这是我在数据库中获得的数据示例:

{
  "tests": {
    "test-1": {
      "label": "Test 1",
      "someData": null,
      "uid": "044e0907-82cc-4f53-a325-e62830e59523"
    },
    "test-2": {
      "label": "Test 2",
      "someData": null,
      "uid": "a204b0a7-0831-4fde-976c-f3a1b0e75655"
    },
    "test-3": {
      "label": "Test 3",
      "someData": null,
      "uid": "d8f457b1-67d6-4ff7-9378-6c0ce5d9de0a"
    },
    "test-4": {
      "label": "Test 4",
      "someData": null,
      "uid": "5ddbd2eb-142c-4fbb-a4bc-d6 [...]" // Here is the bug !!!
    },
    "test-5": {
      "label": "Test 5",
      "someData": null,
      "uid": "e2ee7a1a-e0ae-4f1d-8806-967d94ddb790"
    }
  }
}

我花时间调试以找到它可能出现的位置,在我刷新我的实体之前,属性 的数据没问题,但在刷新之后,有时,一些 uid(即超过 27 个字符)被截断。

$myEntity->setField($field);
$challenge->getField(); // Here the data is OK
$this->doctrine->getManagerForClass(MyEntity::class)->flush();
$challenge->getField(); // Here the data is truncated sometimes

知道这个错误可能来自哪里吗?

学说?数据库(我用MySQL)?

谢谢!

经过一番挖掘,我终于找到了这个错误,这是我的代码的错^^

解释一下,在刷新之前,我对我的数组数据进行了一些转换,使用一个 foreach 循环并将值作为参考。

所以传递给刷新函数的数据数组保留了最后一项的值作为参考。因此,当 DbalLogger 执行记录查询的操作时,它具有缩短过长字符串的 normalizeParams() 功能。 并且由于一些参数值是通过引用传递的,所以在存储到数据库之前它也被缩短了!

结论:小心在 foreach 循环中传递引用 ;)