将主键从自动增量整数转换为UUID

时间:2011-12-19 作者:NettSite

我的目标是让WordPress使用唯一的标识符,而不是主键上的自动递增,这是目前WP的标准方法,以便促进多个WP网站的集成。

理由是,我需要一个万能的钥匙,至少在几个WordPress网站的范围内。其想法是在站点之间同步帖子和其他数据,以便在任何站点上创建的帖子也可用于其他所有站点。不同的网站将位于不同位置的不同服务器上。

该问题

WP所依赖的自动增量功能将明显导致在每个WP站点的对应表中为不同的帖子使用相同的键,即每个站点中的第一篇帖子将是1, 虽然我需要它在所有安装中都是唯一的,以便我可以将每个安装中的数据合并到其他每个网站中。

当WP检索主键时,它将这些值转换为整数。当PHP从MySQL接收到BIGINT时,它通常会将其作为float进行管理,因为它大于PHP的int限制,但在PHP中将其转换为int会产生截断它的效果。

到目前为止我所做的工作,我目前正在使用PHP的uniquid() 函数生成键,该键生成一个13个字符的字符串,然后在1388661576514060 (今晚),比BIGINT 在MySQL中(最多18446744073709551615), 这很酷,我已经应用了一个覆盖wpdb 成功地将其写入数据库,但PHP的整数限制要小得多,最多2147483647.

通过重写insert_replace 中的帮助器函数和查询函数wpdb 使用新类中的函数,这些函数设置并记住要用作主键的唯一值。

我目前的目标是尝试删除(int) 铸造,看看这是否解决了我的问题,虽然我不希望对WP核心进行更改,但似乎这可能是我唯一的选择。

我很关心采取这种方法,因为虽然它可能会解决我眼前的需要,但可能会在其他地方造成更严重的问题,我想知道以前是否有人尝试过类似的方法。

此外,我很好奇为什么开发人员会使用特定的强制转换——我喜欢PHP松散的数据类型,所以除非有特定的原因,否则我不会这样做。我已经充分尊重了其他程序员的理由,试图找出他们是什么,这就是问题所在。

我真的不想因为所有明显的原因而去破解核心,有没有人能提供一些关于如何解决这个问题的想法或想法,或者提供一种不同的方法来解决这个问题?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

不建议修改posts数据库中的核心字段并重新确定其用途。核心行为可能很容易改变和破坏它。

在中存储任何其他信息都很简单custom fields 这是针对非重力数据的,不会干扰正常力学。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register