gpt4 book ai didi

php - 为什么 Doctrine 会生成不同的约束名称?

转载 作者:行者123 更新时间:2023-11-29 23:19:00 24 4
gpt4 key购买 nike

我正在使用 Symfony2 和 Doctrine 来生成我的 MySQL 表。通常,Doctrine 能够很容易地更新数据库。

MySQL 服务器位于 Linux 计算机上。还有一个 Apache 正在运行,它托管我的 Symfony 应用程序。运行时php app/console doctrine:schema:update --dump-sql在 Linux 机器上 Doctrine 告诉我我的数据库是最新的。

但是,当在 Windows 上的完全相同的 Symfony 应用程序上运行此命令并连接到 Windows 计算机上的 MySQL 服务器时,Doctrine 想要更改相当多的约束名称。看起来它想重命名所有索引:

DROP INDEX idx_2d91b64f56629d6d ON table1;CREATE INDEX IDX_13241BA356629D6D ON table1 (col1_id);DROP INDEX idx_2d91b64fbad26311 ON table1;CREATE INDEX IDX_13241BA3BAD26311 ON table1 (col2_id);DROP INDEX idx_bc100bf27dc308 ON table2;CREATE INDEX IDX_8C245317DC308 ON table2 (col3_id);// some more similar lines omitted

为什么会发生这种情况?我看了一下how Symfony generates the constraint names它正在使用 dechexcrc32 ,两者都应该是平台无关的。

最佳答案

这可能不是原因,但看起来确实是一个可能的原因:

http://php.net/manual/en/function.crc32.php

在红色部分,它指出 crc32 可以根据 32 位或 64 位系统返回负值或正值。

这是因为 32 位有符号整数的范围:−2,147,483,648 到 2,147,483,647。如果您从中得知 crc32 假定使用无符号字节,则它生成的任何超过 2,147,483,647 的值都将变为负值。

然后 dechex 将根据十进制值(负数或可能的值)生成一个十六进制值。

关于php - 为什么 Doctrine 会生成不同的约束名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27506388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com