需要一个独特的可逆函数来将文本转换为MySQL中的整数

时间:2017-02-02 14:33:49

标签: mysql

我需要将任意字母数字ID转换为保证唯一且可逆的整数。有什么很酷的技巧可以做到这一点吗?我已经看过一些哈希函数等,但通常它们不会产生整数输出,或者它们是非唯一的。

例如,假设我有一个ID,例如AX36543TXQ。我需要一个函数来唯一地将它映射到一个整数,这样它就不会与任何其他可能的ID冲突,并且如果需要可以转换回它的字母数字形式。

1 个答案:

答案 0 :(得分:0)

避免碰撞是非常困难的,但你可以做类似的事情,如:

首先:创建一个以VARCHAR列为主键的表:

CREATE TABLE `table` (
  `pkey` VARCHAR(10) NOT NULL,
  `name` TEXT NULL,
  `others` TEXT NULL,
  PRIMARY KEY (`pkey`));

添加一些数据:

INSERT INTO `table` (`pkey`, `name`, `others`) VALUES ('a', 'Albert', '123');
INSERT INTO `table` (`pkey`, `name`, `others`) VALUES ('b', 'Bernard', '456');
INSERT INTO `table` (`pkey`, `name`, `others`) VALUES ('c', 'Chelsea', '789');

如您所见,列PKEY是主键,而VARCHAR:

DESCRIBE `table`;

现在,根据自动增量将主键更改为另一列:

1º)创建列:

ALTER TABLE `table` ADD COLUMN `new_key` INT;

2º)用一系列整数填充列

SET @i=0;
SET @Count=(SELECT COUNT(*) FROM `table`);
UPDATE `table` SET `new_key` = @Count-(@i:=@i+1)+1; 

3º)将新列更改为主键

ALTER TABLE `table` DROP PRIMARY KEY;
ALTER TABLE `table` ADD PRIMARY KEY (`new_key`);
ALTER TABLE SO1 MODIFY COLUMN ID INT AUTO_INCREMENT;

要查看最终结果:

DESCRIBE `table`;

并且,您将拥有要检查的原始“主键”,以及每行具有唯一整数的新主键。

为了适合你的情况,“功能”将是:

select `new_key` from `table` where `pkey` = 'AX36543TXQ';

假设上面的选择结果是'17',你的“反向功能”将是:

select `new_pkey` from `table` where `new_key` = 17;