2015-11-21 72 views
1

我有一個表是這樣的:如何將字符串轉換爲唯一編號?

// 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只是接受數位值)

+0

爲什麼你將'Ip'保存爲int?特別是如果你將它與'Username'混合使用,varchar會更合適,但更推薦將'ip'和'username'作爲'varchar'放在不同的列中。 –

+0

@OrelEraki那麼,你的報價是什麼?使用'VARCHAR(50)'類型? – Shafizadeh

+0

儘可能多地限制項目的用戶名長度。 –

回答

2

int(11)是一個32位的數據類型。正因爲如此,它足以容納一個ipv4地址。你的問題指出了。

可逆地對將任意字符串轉換爲32位數據類型很困難:它簡單地缺乏信息存儲容量。

您可以使用查找表來達到此目的。包括php 5.4+在內的許多語言都支持使用名爲「interning」的過程。 https://en.wikipedia.org/wiki/String_interning

或者你可以在MySQL表中建立自己的查找表。其列將是id列和value列。你會實習生每個新的文本字符串通過創建一個具有唯一id值的行,然後使用該值。

你對直接查找varchar(255)或MySQL中的類似值的速度的直覺是合理的。但是,這是不正確的。正確編制索引後,具有這種數據的表格搜索速度非常快。

+1

嗯,謝謝,+1 – Shafizadeh

+0

真的嗎?!所以,如果在'varchar'或'int'列中查找的速度是相同的,那麼我只是簡單地使用'varchar'! – Shafizadeh

+1

速度不一樣。顯然,字符串中有更多的數據。但是使用像MySQL這樣的DBMS的全部重點是將這種查找的負擔放在別人身上,這樣你就可以在合理的時間內建立你的應用程序。實施MySQL的人已經快速地進行了字符串查找。 –

相關問題