MySQL UUID_SHORT() 给出错误 Out of range value for columns

nei*_*ldt 5 mysql uuid bigint

我在 Amazon Web Services RDS 上使用 MySQL 5.6.17,当调用 SELECT UUID_SHORT() 时,我得到的数字大于9223372036854775807。例如我得到的数字是

12057145185130250250

问题出在我的表中,我有一列 BIGINT(20) 无符号,但是当存储数字12057145185130250250时,我收到错误 MySQL 22003

'MySQL 22003 第 1 行的列 '' 的值超出范围'

如果我在 MySQL 5.6.11(在 Windows 2008 64x 上运行)的测试服务器上运行SELECT UUID_SHORT(),结果如下;

23526798209843216

我将要保存号码的列更改为 BIGINT(20) 无符号,但仍然收到此错误。

有什么想法吗?

更新

继我最初的帖子之后,我发现如果我使用工作台编辑器手动将值“12057145185130250250”插入 BIGINT(20) 列,则可以很好地保存。

但是,如果我使用如下所示的存储过程保存该值,就会遇到问题;

DELIMITER $$

CREATE DEFINER=`testaccount`@`%` PROCEDURE `CreateCustomer`(iUserId
INTEGER, sPassword VARCHAR(75)) 

BEGIN

    DECLARE iSalt BIGINT;

    SELECT UUID_SHORT() INTO iSalt;

    INSERT INTO UserCustomer
    (
       UserId,
       Password,
       Salt
    )
    VALUES
    (
       iUserId,
       SHA2(CONCAT(iSalt,sPassword), 256),
       iSalt 
    );

END
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 2

BIGINT并且BIGINT UNSIGNED不一样。除非明确无符号,否则所有整数数据类型都是有符号的。

而且,UUID_SHORT()它的设计目的是产生独特但非随机、不可预测且始终递增的值,这对于盐来说似乎是一个特别糟糕的选择,不是吗?

...特别是自从该RANDOM_BYTES()功能在 5.6.17 中引入以来。

http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_random-bytes