我有一张这样的表:
// viewed
+----+------------------+
| id | username_or_ip |
+----+------------------+
如您所见,username_or_ip
列保留username
或ip
。它的类型是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
只接受数字值)
答案 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)
或类似值的缓慢性的直觉是合理的。但是,尊重,这是不正确的。正确索引,其中包含这类数据的表格搜索速度非常快。