如何将字符串转换为唯一的数字?

时间:2015-11-21 13:27:38

标签: php mysql

我有一张这样的表:

// viewed
+----+------------------+
| id |  username_or_ip  |
+----+------------------+

如您所见,username_or_ip列保留usernameip。它的类型是INT(11) UNSIGNED。我这样存储IP:

INSERT table(ip) VALUES (INET_ATON('192.168.0.1'));

// It will be saved like this: ip = 3232235521

嗯,我想知道,有没有办法将Sajad之类的字符串转换为唯一的数字? (因为正如我所说,username_or_ip只接受数字值)

1 个答案:

答案 0 :(得分:2)

int(11)是32位数据类型。因此,它足以容纳ipv4地址。你的问题指出了这一点。

可逆地将仲裁字符串转换为32位数据类型很困难:它只是缺少信息存储容量。

您可以使用查找表来实现此目的。许多语言,包括php 5.4+,都支持使用名为" interning的过程。" https://en.wikipedia.org/wiki/String_interning

或者您可以在MySQL表中构建自己的查找表。其列为id列和value列。您通过为每个新文本字符串创建具有唯一id值的行来实习,然后使用该值。

你对在MySQL中查找varchar(255)或类似值的缓慢性的直觉是合理的。但是,尊重,这是不正确的。正确索引,其中包含这类数据的表格搜索速度非常快。