Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用MySQL生成随机且唯一的8个字符的字符串

使用MySQL生成随机且唯一的8个字符的字符串
EN

Stack Overflow用户
提问于 2013-05-24 14:55:10
回答 19查看 297.4K关注 0票数 131

我正在开发一款游戏,在某些时候涉及到车辆。我有一个名为" vehicles“的MySQL表,其中包含有关车辆的数据,其中包括存储车辆牌照的列”vehicles“。

现在我遇到问题的部分来了。我需要在创建新车之前找到一个未使用的车牌-它应该是一个由8个字符组成的字母数字随机字符串。我是通过在Lua中使用while循环来生成字符串并查询DB以查看是否使用了它,这是我正在编程的语言。然而,随着车辆数量的增加,我预计这将变得更加低效。因此,我决定尝试使用MySQL查询来解决这个问题。

我需要的查询应该只是生成一个8个字符的字母数字字符串,该字符串还不在表中。我再次想到了生成和检查循环的方法,但我不会将这个问题限制在这个范围内,以防有更有效的方法。我已经能够通过定义一个包含所有允许的字符的字符串来生成字符串,并随机地对其进行子化,仅此而已。

任何帮助都是非常感谢的。

EN

回答 19

Stack Overflow用户

发布于 2013-05-24 15:16:36

我不关心碰撞的可能性。只需生成一个随机字符串并检查它是否存在。如果是这样,再试一次,除非你已经分配了大量的车牌,否则你不需要做更多的次数。

用纯(我的)SQL生成8字符长的伪随机字符串的另一种解决方案:

代码语言:javascript
运行
AI代码解释
复制
SELECT LEFT(UUID(), 8);

您可以尝试执行以下操作(伪代码):

代码语言:javascript
运行
AI代码解释
复制
DO 
    SELECT LEFT(UUID(), 8) INTO @plate;
    INSERT INTO plates (@plate);
WHILE there_is_a_unique_constraint_violation
-- @plate is your newly assigned plate number

由于这篇文章受到了意想不到的关注,让我强调一下ADTC's comment:上面的代码非常愚蠢,并产生了连续的数字。

对于稍微不那么愚蠢的随机性,可以试着这样做:

代码语言:javascript
运行
AI代码解释
复制
SELECT LEFT(MD5(RAND()), 8)

对于真正的(加密安全的)随机性,使用RANDOM_BYTES()而不是RAND() (但是我会考虑将此逻辑上移到应用层)。

票数 146
EN

Stack Overflow用户

发布于 2013-05-24 15:05:43

如何计算连续整数的MD5 (或其他)散列,然后获取前8个字符。

i.e

代码语言:javascript
运行
AI代码解释
复制
MD5(1) = c4ca4238a0b923820dcc509a6f75849b => c4ca4238
MD5(2) = c81e728d9d4c2f636f067f89cc14862c => c81e728d
MD5(3) = eccbc87e4b5ce2fe28308fd9f2a7baf3 => eccbc87e

等。

警告:我不知道在冲突之前你可以分配多少(但它将是一个已知的常量值)。

编辑:这是一个旧的答案,但随着时间的推移,我又看到了它,所以,从观察来看…

所有数字的概率= 2.35%

所有字母的概率= 0.05%

当MD5(82945) = "7b763dcb...“时第一次冲突(结果与MD5(25302)相同)

票数 56
EN

Stack Overflow用户

发布于 2013-05-24 15:07:01

以下是一种使用字母数字作为有效字符的方法:

代码语言:javascript
运行
AI代码解释
复制
select concat(substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1)
             ) as LicensePlaceNumber;

注意:不能保证唯一性。你得单独检查一下。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16737910

复制
相关文章
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
Python 是一种功能强大的编程语言,具有大量的库和模块。其中一个库是 NumPy,它用于数值计算和处理大型多维数组和矩阵。另一个用于Python图像处理的流行库是Pillow,它是Python Imaging Library(PIL)的一个分支。
很酷的站长
2023/08/11
8540
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
12.3K0
如何正确的将数组转换为ArrayList?
对于不可变集合,你可以使用ImmutableList类及其of()与copyOf()工厂方法:(参数不能为空)
崔笑颜
2020/06/08
3.6K0
java中如何将数组转换为List
如何将其转换为ArrayList <Element> arraylist = ???
硬核编程
2020/07/23
3.4K0
outputstream转byte数组_int类型转换为byte类型
Java中将inputstream输入流转换成byte[]字节数组
全栈程序员站长
2022/11/08
8.1K0
Java将列表转换为数组,反之亦然
在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。
用户7886150
2021/04/28
3.5K0
Js根据相同值将数组转换为二维数组
let list = [{ id: 1 }, { id: 1 }, { id: 2 }] let arr = Objec
明知山
2021/06/29
5.7K0
python文字转图片(二值、RGB)以及numpy数组
文字一般使用unicode等编码的形式在计算机中表示,但是其形态本身也很有价值。如果能够把文字转为图片,就可以做一些应用,比如:
blmoistawinde
2020/05/09
5.2K0
python文字转图片(二值、RGB)以及numpy数组
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
24.5K0
c++如何将字符串转为数组(将字符串转换为数组)
string [] imgArr=imgData.Split(new char[]{‘,’});
全栈程序员站长
2022/07/29
7.4K0
[C-C++]将数值变量转换为数组(int/double/float 转化为 char*)
原文链接:https://blog.csdn.net/humanking7/article/details/80175934
祥知道
2020/03/10
2K0
Numpy数组
一、NumPy简介 NumPy是针对多维数组(Ndarray)的一个科学计算(各种运算)包,封装了多个可以用于数组间计算的函数。 数组是相同数据类型的元素按一定顺序排列的组合,注意必须是相同数据类型的,比如说全是整数、全是字符串等。 array([1,2,3]) # 数值型数组 array(['w','s','q'],dtype = '<U1') # 字符型数组 二、NumPy 数组的生成 要使用 NumPy,要先有符合NumPy数组的数据,不同的包
见贤思齊
2020/08/05
5K0
Numpy数组
Numpy 中 axis = n 对应 ndarray 的第 nnn 层 [],从最外层的 axis = 0,逐渐往内层递增。
hotarugali
2022/03/03
8370
Numpy数组
numpy转tensorflow_pytorch numpy
.numpy()和.from_numpy()负责将tensor和numpy中的数组互相转换,共享共同内存,不共享地址 torch.tensor()复制数据,但不共享地址
全栈程序员站长
2022/09/27
4210
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.9K0
Python - 将matplotlib图像转换为numpy.array 或 PIL.Image
matplotlib是python图像处理中让人又爱又恨的库。最近遇到了需要获取plt图像数据的需求,本文记录了将matplotlib图像转换为numpy.array 或 PIL.Image的方法。 众所周知,这个库处理图像会出现内存泄漏的问题,原想着将plt的图转出来用opencv存就好了,然而并没有,牢骚完毕。 转换思路 总体分为两步完成目标: 将plt或fig对象转为argb string的对象 将argb string对象图像转为array 或 Image 步骤一 区分对象为pl
为为为什么
2022/08/04
2K0
如何将 Java 8 中的流转换为数组
最简单地方式就是使用 toArray(IntFunction<A[]> generator) 方法,该方法也是 Java API 所建议使用的方法,详情请戳
村雨遥
2022/06/15
4.2K0
JavaScrip将数组转为对象(JS数组转对象工作经常用)
我想获取一个元素数组,并将它们转换为一个对象。数组中的元素需要是对象的键,带有一些默认的空字符串,作为以后要更改的值。
IT工作者
2021/12/29
7.5K0
python通过fancy indexing把数组转换为one hot编码的numpy array
背景 实现一维numpy数组 a = array([1,0,3]) 转换为2维的 1-hot数组 b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]]) python实现示例代码 import numpy as np if __name__ == '__main__': ind = np.array([1, 0, 3]) x = np.zeros((ind.size, ind.max() + 1)) x[np.arange(ind.size), i
lovelife110
2021/01/14
1.5K0
点击加载更多

相似问题

将into、tuple列表转换为numpy数组

21

如何将numpy数组转换为tuple

42

将tuple ()列表转换为numpy矩阵

10

将numpy数组转换为tuple会扰乱内部的值。

11

如何在tensorflow中将tuple numpy转换为tuple tensor

1667
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档