2012-04-27 95 views
10

我最近一直在使用Symfony2和doctrine2,并且已经实现了一种称为DC2Type的特殊数据类型:某些Symfony2角色被保存为数组的类型。对我来说,它看起来像一个序列化的PHP数组,其中a表示元素的总数,i是数组索引。什么是mysql中的DC2Type数组数据类型

值如下:

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,但没有弄清楚原产地。

回答

24

这不是数据类型。您可能已经注意到列类型是LONGTEXT。 DC2Type:数组是该字段的注释。

原则将该字段的注释用作列的元数据存储位置。由于Mysql不允许存储数组,因此Doctrine使用DC2Type:数组作为注释以便知道如何反序列化内容。

看看下面的链接。

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

你所提到的链接,你可以看到评论DC2Type:enumvisibility表示该字段的内容是一个标志,表示该记录是可见或不可见。它根本不是一种新的数据类型。它应该被视为数据库级别的帮助策略。对于Doctrine来说,这是一种自定义数据类型。

9

这只是一个字符串。它的格式是一个序列化的PHP数组。 s:表示数组中每个项目值的大小或长度。

e.g. s:32:"ROLE_SONATA_USER_ADMIN_USER_EDIT"

如果算上中的角色字符串中的字符,有32

希望这有助于。

相关问题