Symfony 2.8与Oracle数据库-标识符太长


Symfony 2.8 with Oracle Database - Identifier is too long

我试图配置phpcr_odm与Symfony 2.8使用Oracle数据库从这个链接。当我试图运行php app/console doctrine:schema:create时,控制台返回错误

  [Doctrine'DBAL'Exception'DriverException]
  An exception occurred while executing 'CREATE UNIQUE INDEX UNIQ_37E65615460D9FD7413BC13C1AC10DC4E7087E10 ON phpc
  r_binarydata (node_id, property_name, workspace_name, idx)':
  ORA-00972: identifier is too long
  [Doctrine'DBAL'Driver'OCI8'OCI8Exception]
  ORA-00972: identifier is too long

我知道Oracle SQL限制唯一索引为30个字符,但我不知道如何在symfony中执行唯一索引之前限制它们。有人能告诉我如何解决这个问题吗?

如果你自己在实体上声明唯一约束,你可以手动设置它的名称:

@ORM'Table(name="phpcr_binarydata", uniqueConstraints={@ORM'UniqueConstraint(name="SMALL_KEY_NAME_HERE", columns={"node_id", "property_name", "workspace_name", "idx"})})

如果数据库创建不在您的控制之下,则Doctrine'DBAL'Schema'SchemaConfig::$maxIdentifierLength中配置了最大标识符长度,您可以尝试扩展和覆盖。

在SQL-92中,标准的更新版本似乎可以选择允许128个字符的名称。否则这就是解决方案:https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Schema/AbstractAsset.php#L219