Что такое тип данных массива DC2Type в mysql

Недавно я работал с Symfony2 и doctrine2 и понял особый тип данных, называемый массивом DC2Type: массив, который некоторые роли Symfony2 сохраняются как. Для меня это просто похоже на сериализованный массив PHP, где a означает общее количество элементов, я - индекс массива.

Значение выглядит так:

a:15:{i:0;s:32:"ROLE_SONATA_USER_ADMIN_USER_EDIT";i:1;s:32:"ROLE_SONATA_USER_ADMIN_USER_LIST";i:2;s:34:"ROLE_SONATA_USER_ADMIN_USER_CREATE";i:3;s:32:"ROLE_SONATA_USER_ADMIN_USER_VIEW";i:4;s:34:"ROLE_SONATA_USER_ADMIN_USER_DELETE";i:5;s:36:"ROLE_SONATA_USER_ADMIN_USER_OPERATOR";i:6;s:34:"ROLE_SONATA_USER_ADMIN_USER_MASTER";i:7;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_EDIT";i:8;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_LIST";i:9;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_CREATE";i:10;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_VIEW";i:11;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_DELETE";i:12;s:37:"ROLE_SONATA_USER_ADMIN_GROUP_OPERATOR";i:13;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_MASTER";i:14;s:10:"ROLE_ADMIN";}

Я хочу знать, что это за тип данных?

И что означает следующий идентификатор:

s:

Я искал интернет, но не получил никаких полезных данных.

Я также столкнулся с этой записью поваренной книги - http://readthedocs.org/docs/doctrine-orm/en/2.0.x/cookbook/mysql-enums.html, но не понял происхождение.

Ответ 1

Это не тип данных. Возможно, вы заметили, что тип столбца - LONGTEXT. DC2Type: array - комментарий поля.

Doctrine использует комментарий поля в качестве места хранения метаданных столбца. Поскольку Mysql не позволяет вам хранить массив, Doctrine использует DC2Type: array как комментарий, чтобы знать, как несериализировать содержимое.

Посмотрите на приведенную ниже ссылку.

https://github.com/doctrine/dbal/issues/1614

Из упомянутой ссылки вы можете видеть, что комментарий DC2Type: enumvisibility указывает, что содержимое поля является флагом, указывающим, что запись видна или нет. Это не новый тип данных. Его следует рассматривать как вспомогательную стратегию на уровне базы данных. Для Doctrine это настраиваемый тип данных.

Ответ 2

Это просто строка. Его формат представляет собой сериализованный массив PHP. S: относится к размеру или длине каждого значения элемента в массиве.

e.g. s:32:"ROLE_SONATA_USER_ADMIN_USER_EDIT"

Если вы подсчитаете символы в строке ROLE, будет 32.

Надеюсь, что это поможет.