【问题标题】:How to map a single char column in Doctrine 2如何在 Doctrine 2 中映射单个字符列
【发布时间】:2014-01-28 06:44:04
【问题描述】:

如何使用注释映射 Doctrine 2 中的单个字符列?我想要一个 char 类型,而不是单个 char 字符串。

【问题讨论】:

    标签: orm doctrine-orm annotations char mapping


    【解决方案1】:

    您始终可以使用带有固定选项的字符串类型:

    /**
     * @Column(type="string", length=2, options={"fixed" = true})
     */
    protected $country;
    

    上面的代码sn-p产生如下SQL:

    `country` char(2) NOT NULL,
    

    【讨论】:

    • 我想在docs 中为 PostgreSQL 添加此注释:char、varchar 和 text 之间没有性能差异,除了使用 char(n) 时增加了存储空间,以及存储到长度受限的列时,需要一些额外的 CPU 周期来检查长度。虽然 char(n) 在其他一些数据库中具有性能优势,但在 PostgreSQL 中没有这样的优势;事实上 char(n) 通常是最慢的,因为它有额外的存储成本。在大多数情况下,应该使用 text 或 varchar。
    【解决方案2】:

    Doctrine 没有开箱即用地定义 CHAR 类型,但是它允许您定义自定义类型,您可以使用它来创建用于注释的“char”类型。

    Doctrine 文档有一个这样的例子:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types

    【讨论】:

      【解决方案3】:

      您最终可能会提供自己的完整列定义:

      /**
       * @Column(type="string", columnDefinition="CHAR(2) NOT NULL")
       */
      protected $country = null;
      

      【讨论】:

      • 您通常不想使用 columnDefinition 属性,因为您很可能将自己绑定到一个数据库引擎
      猜你喜欢
      • 2015-07-01
      • 2014-02-12
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      相关资源
      最近更新 更多