我正在构建一个数据库驱动的 PHP 应用程序,它使用 UUID 来存储每一行数据。应用程序当前使用以下查询生成 UUID:
SELECT UUID()
生成类似于 的输出84058227-294c-11e3-916a-7a7919b2b2bc
。
许多在线资源建议存储 UUIDBINARY(16)
以提高整体应用程序性能。但是当我尝试将 UUID 插入数据库时,我收到以下错误:
Warning: #1265 Data truncated for column 'x' at row x
我意识到发生此错误是因为 UUID 太大而无法存储列,并且可以通过简单地增加列可能存储的字符数量(例如:)轻松解决此问题BINARY(20)
,但我担心这样做可能会减少应用程序在未来的性能。
考虑到这么多在线资源建议使用BINARY(16)
来存储 UUID,我假设我犯了一个错误。
有人可以指出我正确的方向吗?
有关额外信息,这是我正在使用(在 PHP 中)将数据插入数据库的代码:
//PDO Query
$this->query(
INSERT INTO users
(
user_id, //the UUID is stored in this column
taxonomy_id,
user_email,
user_password,
user_salt,
user_activation_key,
user_is_administrator
)
VALUES(?,?,?,?,?,?,?)
',
array(
$this->uuid(), //method that generates UUID
$taxonomy_id,
$user_email,
$user_password,
$user_salt,
$user_activation_key,
$user_is_administrator
)
)
);
以及生成每个 UUID 的方法:
public function uuid()
{
$uuid = $this->query("SELECT UUID() AS uuid");
return $uuid[0]['uuid'];
}