对于我所有的项目,我对数据库中的 id 字段使用 VARBINARY(16)。id 是由以下代码生成的 uuid。
function gen_uuid() {
return sprintf('%04x%04x%04x%04x%04x%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
Windows XP + MySQL 5.5.30 + PhpMyAdmin 3.5.2/3.5.8/4.0.0
我在 PhpMyAdmin 中运行以下查询并得到一个空结果
SELECT UNHEX('5578fae02ba342e0bc977266f8e08cf6')
如果我在 MySQL 控制台中运行它,我会得到以下结果
+-------------------------------------------+
| UNHEX('5578fae02ba342e0bc977266f8e08cf6') |
+-------------------------------------------+
| Ux·α+úBα╝ùrf°αî÷ |
+-------------------------------------------+
FreeBSD + MySQL 5.5.30 + PhpMyAdmin 3.5.2
我在 PhpMyAdmin 中运行相同的查询,结果得到了十六进制版本的 ID5578fae02ba342e0bc977266f8e08cf6
在 MySQL 控制台中运行查询会产生与在我的 XP 服务器上相同的结果
备注 如果我在 XP 机器上浏览表数据,大约 10% 的行似乎没有 ID。该软件和所有关系似乎都可以正常工作。如果我用看似无效的 ID 编辑记录,我可以在页面的文本字段中看到预期的结果。保存它并不能解决任何问题,通常将其更改为另一个。
对我来说,这似乎是 PhpMyAdmin 的一个问题,但到目前为止,尝试不同的版本并没有为我解决任何问题。我之前运行 mysql 5.5.29 并更新到 5.5.30 但由于控制台版本似乎工作正常,我认为可以排除 mysql。两台服务器都使用 nginx 运行 PHP fast-cgi。更新到最新版本的 PHP 并没有解决任何问题。
其他 UUID 的工作如这些屏幕截图所示:
XP 服务器
FreeBSD 服务器