在MySQL中将字符串转换为int
我有一个列,其名称如下:在MySQL中将字符串转换为int,mysql,sql,Mysql,Sql,我有一个列,其名称如下: Ernest Hemingway Jackson Pollock 我想将它们转换成数字,并将它们存储在INT字段中。可能得到每个字母在字母表中的位置或类似的东西,从而得到一个数字: 23764283456 23984623746 有什么函数可以做这样的事情吗?我不介意INT的长度,也不介意结果是一个数字还是另一个数字。重要的是,每次我将函数应用于名称时,结果都是相同的 谢谢 试试这个: crc32(“欧内斯特·海明威”) 将始终为您提供2479642411请尝试以下
Ernest Hemingway
Jackson Pollock
我想将它们转换成数字,并将它们存储在INT字段中。可能得到每个字母在字母表中的位置或类似的东西,从而得到一个数字:
23764283456
23984623746
有什么函数可以做这样的事情吗?我不介意INT的长度,也不介意结果是一个数字还是另一个数字。重要的是,每次我将函数应用于名称时,结果都是相同的
谢谢 试试这个:
crc32(“欧内斯特·海明威”)代码>
将始终为您提供2479642411
请尝试以下操作:
crc32(“欧内斯特·海明威”)代码>
将始终为您提供2479642411
正如@Gordon_Linoff在评论中所说,大量数据不能存储在int
但我将向您展示如何将字符串转换为字符的ascii
您可以使用HEX
SELECT HEX('test')
+-------------+
| HEX('test') |
+-------------+
| 74657374 |
+-------------+
正如@Gordon_Linoff在评论中所说,大量数据不能存储在int
但我将向您展示如何将字符串转换为字符的ascii
您可以使用HEX
SELECT HEX('test')
+-------------+
| HEX('test') |
+-------------+
| 74657374 |
+-------------+
这是一个单向散列,但有一个重要的问题:整数应该可以在平台上表示
PHP代码,假设需要32位兼容性:
$hash = sha1('Ernest Hemingway');
// last 6 characters, represent 3 bytes
$hash = substr($hash, -6);
$result = hexdec($hash); // integer: 1331016
请记住,这有一个非常低的熵:2^24=16777216的可能性
4个字节太大,因为有符号/无符号整数差异会导致某些输入的浮点,并且浮点实际上不能用完全确定性转换为整数。这是一个单向散列,但有一个重要的问题:整数应该在平台上表示
PHP代码,假设需要32位兼容性:
$hash = sha1('Ernest Hemingway');
// last 6 characters, represent 3 bytes
$hash = substr($hash, -6);
$result = hexdec($hash); // integer: 1331016
请记住,这有一个非常低的熵:2^24=16777216的可能性
4个字节太大,因为有符号/无符号整数差异会导致某些输入的浮点值,并且浮点值实际上不能用完美的确定性转换为整数。选择字段,将(子字符串索引(字段“--”,-1),无符号整数)转换为num
从桌子上
按数量排序 选择字段,将(子字符串_索引(字段'-',1),无符号整数)转换为num
从桌子上
按数量排序 您指定的数字(如23764283456)对于MySQL中的int
字段来说太长。所以你的问题有点不清楚。不过,我可能会建议您研究散列。您可能还想解释为什么要这样做。您想如何处理该号码?因为您的需求可以通过将每个输入转换为数字1
来解决。谢谢!我之所以要这样做,是因为我需要为数据库中人物的图像命名文件,最好的方法是将人物的名字转换成一个数字,并用这个数字将文件命名为34823793642.jpg您指定的数字(例如23764283456)对于MySQL中的int
字段来说太长了。所以你的问题有点不清楚。不过,我可能会建议您研究散列。您可能还想解释为什么要这样做。您想如何处理该号码?因为您的需求可以通过将每个输入转换为数字1
来解决。谢谢!我之所以要这样做,是因为我需要为数据库中人物的图像命名文件,最好的方法是将人物的名字转换成一个数字,并将这个数字命名为34823793642。JPG一些输入会在结果中产生a-F字符。@GrasDouble例如??尽管,在32位平台上,一半的结果将为负值,因此您可能必须转换为绝对值:abs(crc32('foobar'))
。32位和64位平台之间会有差异。@GrasDouble您完全正确。但是,我只是回答了这个问题,因为OP只是希望将字符串一致地转换为数值。SELECT abs(crc32(name))FROM person
works。谢谢有些输入会在结果中产生A-F字符。@GrasDouble例如??但是,在32位平台上,一半的结果是负数,因此您可能必须转换为绝对值:abs(crc32('foobar'))
。32位和64位平台之间会有差异。@GrasDouble您完全正确。但是,我只是回答了这个问题,因为OP只是希望将字符串一致地转换为数值。SELECT abs(crc32(name))FROM person
works。谢谢