国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL存儲(chǔ)IP地址的方法

2024-07-24 12:45:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

為什么要問(wèn)如何存儲(chǔ)IP?

首先就來(lái)闡明一下部分人得反問(wèn):為什么要問(wèn)IP得怎樣存,直接varchar類(lèi)型不就得了嗎?

其實(shí)做任何程序設(shè)計(jì)都要在功能實(shí)現(xiàn)的基礎(chǔ)上最大限度的優(yōu)化性能。而數(shù)據(jù)庫(kù)設(shè)計(jì)是程序設(shè)計(jì)中不可忽略的一個(gè)重要部分,所以巧存IP地址可以一定程度獲得很大提升。

利用函數(shù)算法處理

在MySQL中沒(méi)有直接提供IP類(lèi)型字段,但如果有兩個(gè)函數(shù)可以把IP與最大長(zhǎng)度為10位數(shù)字類(lèi)型互轉(zhuǎn),所以使用int類(lèi)型存儲(chǔ)IP比varchar類(lèi)型存儲(chǔ)IP地址性能要提升很多,減少不少空間。因?yàn)関archar是可變長(zhǎng)形,需要多余的一個(gè)字節(jié)存儲(chǔ)長(zhǎng)度。另外int型在邏輯運(yùn)算上要比varchar速度快。

 
IP轉(zhuǎn)數(shù)字函數(shù)inet_aton()

我們轉(zhuǎn)換下幾個(gè)常用的IP地址

mysql> select inet_aton('255.255.255.255'); +------------------------------+ | inet_aton('255.255.255.255') | +------------------------------+ | 4294967295 | +------------------------------+ 1 row in set (0.00 sec) mysql> select inet_aton('192.168.1.1'); +--------------------------+ | inet_aton('192.168.1.1') | +--------------------------+ | 3232235777 | +--------------------------+ 1 row in set (0.00 sec) mysql> select inet_aton('10.10.10.10'); +--------------------------+ | inet_aton('10.10.10.10') | +--------------------------+ | 168430090 | +--------------------------+ 1 row in set (0.00 sec)

所以IP的表字段可以設(shè)置為INT(10)就好,如果IP獲取不到可以直接存0代表獲取不到IP的意思

 

數(shù)字轉(zhuǎn)IP函數(shù)inet_ntoa()

mysql> select inet_ntoa(4294967295); +-----------------------+ | inet_ntoa(4294967295) | +-----------------------+ | 255.255.255.255 | +-----------------------+ 1 row in set (0.00 sec) mysql> select inet_ntoa(3232235777); +-----------------------+ | inet_ntoa(3232235777) | +-----------------------+ | 192.168.1.1 | +-----------------------+ 1 row in set (0.00 sec) mysql> select inet_ntoa(168430090); +----------------------+ | inet_ntoa(168430090) | +----------------------+ | 10.10.10.10 | +----------------------+ 1 row in set (0.00 sec) mysql> select inet_ntoa(0); +--------------+ | inet_ntoa(0) | +--------------+ | 0.0.0.0 | +--------------+ 1 row in set (0.00 sec)

注意,0轉(zhuǎn)換為 0.0.0.0

 整型字段的比較比字符串效率高很多,這也符合一項(xiàng)優(yōu)化原則:字段類(lèi)型定義使用最合適(最小),最簡(jiǎn)單的數(shù)據(jù)類(lèi)型。
inet_aton()算法,其實(shí)借用了國(guó)際上對(duì)各國(guó)IP地址的區(qū)分中使用的ip number。
a.b.c.d 的ip number是:
a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。

以上講解的就是MySQL存儲(chǔ)IP地址的方法,希望能夠?qū)Υ蠹业膶W(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青浦区| 呼伦贝尔市| 静宁县| 高要市| 峨眉山市| 南丹县| 钟祥市| 武邑县| 安宁市| 呼和浩特市| 泰安市| 奉节县| 元谋县| 西盟| 宁夏| 砚山县| 巴楚县| 奎屯市| 恩施市| 静海县| 泰安市| 临夏市| 霍邱县| 毕节市| 临江市| 治县。| 五莲县| 乐陵市| 文成县| 四会市| 钟祥市| 鄂伦春自治旗| 浪卡子县| 兰西县| 东乡| 大悟县| 罗平县| 永康市| 蓬溪县| 高尔夫| 武宣县|