自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)IP地址的方法

存儲(chǔ) 存儲(chǔ)軟件 MySQL
在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速度快。

為什么要問(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速度快。

[[229227]]

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

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

[sql] view plain copy

  1. mysql> select inet_aton('255.255.255.255');   
  2. +------------------------------+   
  3. | inet_aton('255.255.255.255') |   
  4. +------------------------------+   
  5. |          4294967295 |   
  6. +------------------------------+   
  7. 1 row in set (0.00 sec)   
  8. mysql> select inet_aton('192.168.1.1');     
  9. +--------------------------+   
  10. | inet_aton('192.168.1.1') |   
  11. +--------------------------+   
  12. |        3232235777 |   
  13. +--------------------------+   
  14. 1 row in set (0.00 sec)   
  15. mysql> select inet_aton('10.10.10.10');   
  16. +--------------------------+   
  17. | inet_aton('10.10.10.10') |   
  18. +--------------------------+   
  19. |        168430090 |   
  20. +--------------------------+   
  21. 1 row in set (0.00 sec)   

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

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

  1. mysql> select inet_ntoa(4294967295);   
  2. +-----------------------+   
  3. | inet_ntoa(4294967295) |   
  4. +-----------------------+   
  5. | 255.255.255.255    |   
  6. +-----------------------+   
  7. 1 row in set (0.00 sec)   
  8. mysql> select inet_ntoa(3232235777);   
  9. +-----------------------+   
  10. | inet_ntoa(3232235777) |   
  11. +-----------------------+   
  12. | 192.168.1.1      |   
  13. +-----------------------+   
  14. 1 row in set (0.00 sec)   
  15. mysql> select inet_ntoa(168430090);   
  16. +----------------------+   
  17. | inet_ntoa(168430090) |   
  18. +----------------------+   
  19. | 10.10.10.10     |   
  20. +----------------------+   
  21. 1 row in set (0.00 sec)   
  22. mysql> select inet_ntoa(0);       
  23. +--------------+   
  24. | inet_ntoa(0) |   
  25. +--------------+   
  26. | 0.0.0.0   |   
  27. +--------------+   
  28. 1 row in set (0.00 sec)   

整型字段的比較比字符串效率高很多,這也符合一項(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í)有所幫助。

責(zé)任編輯:武曉燕 來(lái)源: 松勤軟件學(xué)院
相關(guān)推薦

2010-05-14 17:44:47

MySQL數(shù)據(jù)庫(kù)

2011-03-01 11:21:11

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎

2011-03-02 12:57:08

MySQL存儲(chǔ)引擎分支現(xiàn)狀

2017-09-03 15:41:31

數(shù)據(jù)庫(kù)存儲(chǔ)分布式

2020-06-01 08:50:38

MySQLIP地址數(shù)據(jù)庫(kù)

2009-05-27 11:01:29

UbuntuMySQL存儲(chǔ)

2022-09-16 11:33:24

數(shù)據(jù)庫(kù)關(guān)系

2011-02-25 17:47:44

數(shù)據(jù)庫(kù)存儲(chǔ)編寫(xiě)

2011-08-15 15:14:54

SQL Server存儲(chǔ)過(guò)程異常處理

2011-08-16 16:22:38

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎MyISAM

2023-01-18 08:25:23

數(shù)據(jù)庫(kù)存儲(chǔ)類(lèi)型

2011-04-06 17:01:40

MySQL數(shù)據(jù)庫(kù)監(jiān)聽(tīng)

2024-06-03 08:29:20

2011-05-17 15:30:27

Oracle數(shù)據(jù)庫(kù)ADO

2022-08-10 14:03:01

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)

2024-09-29 16:09:23

2018-10-31 11:09:55

python數(shù)據(jù)存儲(chǔ)

2011-08-05 14:31:04

mysql_conve批量轉(zhuǎn)換MYSQL數(shù)據(jù)MYISAM

2010-06-13 14:26:22

IP協(xié)議地址

2024-05-20 10:20:37

數(shù)據(jù)庫(kù)存儲(chǔ)容量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)