在原则中配置索引文本长度MySQL
我的数据库中有一个文本字段,上面有前10个字符的索引。我如何在我的条令实体中指定 我在任何地方都找不到有关特定于数据库的索引选项的任何信息:/ 这是我的“部分”MySQL create语句:在原则中配置索引文本长度MySQL,mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,我的数据库中有一个文本字段,上面有前10个字符的索引。我如何在我的条令实体中指定 我在任何地方都找不到有关特定于数据库的索引选项的任何信息:/ 这是我的“部分”MySQL create语句: KEY `sourceaddr_index` (`sourceaddr`(10)), 这是我在教义中的@索引: @ORM\Index(name="sourceaddr_index", columns={"sourceaddr"}, options={}), 这不会影响正常使用,但我在将开发部署到新
KEY `sourceaddr_index` (`sourceaddr`(10)),
这是我在教义中的@索引:
@ORM\Index(name="sourceaddr_index", columns={"sourceaddr"}, options={}),
这不会影响正常使用,但我在将开发部署到新笔记本电脑时,以及在基于我的实体创建数据库时,注意到了问题
任何帮助都将不胜感激:)简而言之:您不能在原则中设置此项。Doctrine的ORM特别关注跨供应商兼容性,您所描述的索引类型虽然在许多现代RDBMS中得到支持,但在一定程度上超出了Doctrine的处理范围 不幸的是,如果您使用Doctrine的模式更新程序(在Symfony中是
php应用程序/控制台Doctrine:schema:update--force
),如果您手动更新数据库,则Doctrine有时会回归更改以保持同步
在我需要这样的东西的情况下,我只是设置了一个函数,通过SQL发送相关的altertable
语句。如果要分发代码(即,它可能在其他/旧的数据库上运行),则可以使用包装语句来确保
这并不理想,但一旦你的应用程序/软件稳定下来,这样的问题就不会经常发生。在MySQL中手动创建索引后,我很幸运地在Doctrine中命名了索引。它既不美观也不优雅,如果您忘记重新创建索引,则很容易在从开发到生产的过程中出错。但是,教义似乎理解它,尊重它 在我的实体中,我有以下定义。教义忽略了长度选项——这是我一厢情愿的想法
/**
* Field
*
* @ORM\Table(name="field", indexes={
* @ORM\Index(name="field_value_bt", columns={"value"}, options={"length": 100})
* })
在MySQL中,我执行
CREATE INDEX field_value_bt ON field (value(100))
就我所见,条令只保留索引,只要它的名称相同。从条令2.9开始,可能的话,请参见: 不幸的是,原则似乎对空白位置非常挑剔,因此,例如,
update--dump-sql
产生:
DROP INDEX slug ON wp_terms;
CREATE INDEX slug ON wp_terms (slug(191));
即使你执行了这些操作,它们的消息也会保留在那里(用MariaDB 10.3.14测试)。MySQL默认索引将超过10个字符。你真的需要将其限制为10个字符吗?谢谢,这很有帮助。。。知道平台特定选项的意义吗?当您开发DQL扩展之类的东西时,条令使用的平台抽象非常有用。例如,在MySQL中,您可以在某个日期前后调用
MONTH()
,以获取月份部分,而在PGSQL中,您可以EXTRACT(x FROM y)
,通过平台检查,您可以为两个供应商执行一个扩展。简而言之:如果你正在做很多特定于平台的事情,也许使用通用ORM不是最好的选择。此外,如果你想将它添加到复合索引中,它也可以工作options={“length”:{191,191}
和options={“length”:{null,191}
DROP INDEX slug ON wp_terms;
CREATE INDEX slug ON wp_terms (slug(191));