在尝试优化一些查询以避免使用PHP时,我尝试将最初在PHP中创建的两个例程转换为在其AlphaID表示中编码整数,然后从字符串转换为整数。
让我们深吸一口气,然后才能认为这是一个堆栈溢出问题,我在发帖前已询问
我试图将它们移植到独自一人,但是有一些问题:
我有建议使用AES_ENCRYPT()及其对应方解密,但这不是目的,因为作为项目的要求,我真正需要的是在字母和数字的文本表示中显示更好的主密钥(仅!)
我还建议使用散列函数,我测试了MD5()、SHA1()和SHA2()的所有组合,但是它们都会产生很长的字符串,这在web环境中很难显示。
当然,如果能够在数据库中直接进行这种转换,我就可以将INT改为BIGINT,并有多达9,223,372,036,854,775,807记录。
那么,是否有一种方法可以用MSQL将整数表示为AlphaID?或者类似的东西,我愿意接受建议。
如果不是内置的东西,也许这可以被视为非主题,我如何才能修复我所做的实现呢?
发布于 2016-07-15 06:07:23
使用内置函数进行此操作的最简单方法是将数字转换为基数36:
mysql> select conv(9223372036854775807,10,36);
+---------------------------------+
| conv(9223372036854775807,10,36) |
+---------------------------------+
| 1Y2P0IJ32E8E7 |
+---------------------------------+
1 row in set (0.00 sec)
mysql>
这允许使用0-9A-Z,是CONV()
支持的最大基础.
皈依:
mysql> select conv('1Y2P0IJ32E8E7', 36, 10);
+-------------------------------+
| conv('1Y2P0IJ32E8E7', 36, 10) |
+-------------------------------+
| 9223372036854775807 |
+-------------------------------+
1 row in set (0.00 sec)
mysql>
CONV
这里的文档。
如果你不知道基地是如何工作的,请看这里。
https://dba.stackexchange.com/questions/143997
复制相似问题