91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL中用什么數(shù)據(jù)類(lèi)型存IP地址

jf_ro2CN3Fa ? 來(lái)源:飛天小牛肉 ? 2023-08-25 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來(lái)源:飛天小牛肉

提到 IP 地址(IPv4),大伙兒腦子里肯定馬上能浮現(xiàn)類(lèi)似于 192.168.0.1、127.0.0.1 這種常見(jiàn)的 IP 地址,然后結(jié)合這個(gè)問(wèn)題 “MySQL 中用什么數(shù)據(jù)類(lèi)型存 IP 地址?”,于是乎脫口而出用 char 字符串類(lèi)型存。

面試官一臉冷漠,你頓時(shí)意識(shí)到情況不對(duì),又仔細(xì)琢磨了一下。

然后發(fā)現(xiàn),這個(gè) IP 地址的長(zhǎng)度是變化的,最短可以是 0.0.0.0 只需要 7 位,最長(zhǎng)可以是 255.255.255.255 需要 15 位,于是自信地回答使用 varchar(15) 來(lái)存儲(chǔ) IP 地址,并為自己能夠想到這一層而暗自竊喜。

誰(shuí)知面試官竟輕蔑一笑,問(wèn)你 “確定嗎?”,你覺(jué)得這是面試官在考驗(yàn)?zāi)?,于是?jiān)定的回答 “確定”。

然后就開(kāi)始了下一題

......

人們經(jīng)常使用 varchar(15) 列來(lái)存儲(chǔ) IP 地址,但事實(shí)上這并不是最優(yōu)解。

IP 地址的本質(zhì)是 32 位無(wú)符號(hào)整數(shù),類(lèi)似于 192.168.0.1 這種點(diǎn)分十進(jìn)制的字符串寫(xiě)法只是為了幫助人們理解和記憶,192.168.0.1 對(duì)應(yīng)的十進(jìn)制表示是 無(wú)符號(hào)整數(shù) 3232235521。

所以,說(shuō)用字符串類(lèi)型存 IP 地址的,其實(shí)是潛意識(shí)中以為 IP 地址是字符串,存的是點(diǎn)分十進(jìn)制的字符串,但正確的應(yīng)該是存 32 位的無(wú)符號(hào)整數(shù)

所謂有符號(hào)數(shù)其實(shí)就是將最高位作為符號(hào)位,比如 32 位的有符號(hào) INT,最高位是符號(hào)位,剩下 31 位才是真實(shí)的數(shù)值,所以有符號(hào) INT 的取值區(qū)間為:

無(wú)符號(hào) INT 的取值區(qū)間為:

下表列出了 MySQL 出各個(gè)整數(shù)類(lèi)型有符號(hào)和無(wú)符號(hào)的的取值范圍,在定義表時(shí),可以在數(shù)據(jù)類(lèi)型后面添加關(guān)鍵字 UNSIGNED 來(lái)定義無(wú)符號(hào)整數(shù),否則默認(rèn)為有符號(hào)整數(shù):

類(lèi)型 有符號(hào)數(shù)取值范圍 無(wú)符號(hào)數(shù)取值范圍
TINYINT(1 字節(jié),8 bit) -128 ? 127 0 ? 255
SMALLINT(2 字節(jié),16 bit) -32768 ? 32767 0 ? 65535
MEDIUMINT(3 字節(jié),24 bit) -8388608 ? 8388607 0 ? 16777215
INT(4 字節(jié),32 bit) -2147483648 ? 2147483647 0 ? 4294967295
BIGINT(8 字節(jié),64 bit) -9223372036854775808 ? 9223372036854775807 0 ? 18446744073709551615

結(jié)合上表,可以看出,32 位的無(wú)符號(hào) INT 正好可以容納 IPv4 地址,下面是 INT UNSIGNED 和 VARCHAR(15) 兩種數(shù)據(jù)類(lèi)型的對(duì)比:

存儲(chǔ)空間:4 字節(jié)的 INT 類(lèi)型 15 字節(jié)的 VARCHAR(15) 更加節(jié)省存儲(chǔ)空間。另外,VARCHAR 除了會(huì)保存需要的字符數(shù),還會(huì)另加一個(gè)字節(jié)來(lái)記錄長(zhǎng)度(如果列聲明的長(zhǎng)度超過(guò) 255,則使用兩個(gè)字節(jié)記錄長(zhǎng)度),所以 VARCHAR(15) 其實(shí)要占用 16 個(gè)字節(jié)。

檢索速度:如果我們要在 IP 地址上建立索引,那么對(duì)于字符串索引來(lái)說(shuō),整數(shù)索引的檢索速度簡(jiǎn)直就是降緯打擊了,因?yàn)樽址?lèi)型的比較是需要從第一位字符開(kāi)始遍歷依次進(jìn)行的,速度較慢。

MySQL 非常貼心地提供了 IPv4 地址點(diǎn)分十進(jìn)制和無(wú)符號(hào)整數(shù)的相互轉(zhuǎn)換函數(shù),inet_aton 和 inet_ntoa(底層是二進(jìn)制移位操作,速度很快):

afe138ae-4309-11ee-a2ef-92fbcf53809c.png

當(dāng)然你更應(yīng)該在業(yè)務(wù)中去執(zhí)行這些轉(zhuǎn)換,減輕 MySQL 的壓力。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ip地址
    +關(guān)注

    關(guān)注

    0

    文章

    309

    瀏覽量

    18939
  • IPv4
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    20885
  • 數(shù)據(jù)類(lèi)型

    關(guān)注

    0

    文章

    237

    瀏覽量

    14185
  • mysql架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    769

原文標(biāo)題:我懵了,如果要存 IP 地址,用什么數(shù)據(jù)類(lèi)型比較好?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    變量的數(shù)據(jù)類(lèi)型類(lèi)型輸入連線的數(shù)據(jù)類(lèi)型不兼容。

    請(qǐng)問(wèn)這個(gè)vi錯(cuò)在哪里?變量的數(shù)據(jù)類(lèi)型類(lèi)型輸入的是一樣的啊運(yùn)行次序是會(huì)計(jì)貼士.vi在“支出情況”中點(diǎn)擊“保存”數(shù)據(jù)庫(kù)是MySQL@宗師級(jí)釣魚(yú)大師 @zhihuizhou @格式吶傷 @
    發(fā)表于 09-01 11:02

    照著別人的程序做了一遍,變量的數(shù)據(jù)類(lèi)型和輸入類(lèi)型不符

    @zhihuizhou主vi是會(huì)計(jì)貼士vi在獲取收入記錄.vi和獲取支出記錄vi中 有錯(cuò)誤變量的數(shù)據(jù)類(lèi)型類(lèi)型輸入連線的數(shù)據(jù)類(lèi)型不兼容。本來(lái)用的數(shù)據(jù)庫(kù)是
    發(fā)表于 09-03 14:46

    MySQL字符類(lèi)型

    MySQL數(shù)據(jù)類(lèi)型之字符串(string)
    發(fā)表于 06-14 11:58

    mysql是根據(jù)哪些原則來(lái)進(jìn)行數(shù)據(jù)類(lèi)型選擇的?

    mysql應(yīng)該根據(jù)那些原則來(lái)進(jìn)行數(shù)據(jù)類(lèi)型的選擇!
    發(fā)表于 07-23 06:32

    vhdl數(shù)據(jù)類(lèi)型

    VHDL中的標(biāo)識(shí)符可以是常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。VHDL中的數(shù)據(jù)類(lèi)型可以分成四大類(lèi): 標(biāo)量型(SCALAR TYPE):屬單元素的最基本的數(shù)據(jù)類(lèi)型,通常用于描述一個(gè)單值數(shù)據(jù)對(duì)象
    發(fā)表于 03-30 15:59 ?11次下載

    MySQL支持的三種數(shù)據(jù)類(lèi)型

    MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)字數(shù)據(jù)類(lèi)型。這些類(lèi)型包括整數(shù)類(lèi)型、定點(diǎn)類(lèi)型、浮點(diǎn)類(lèi)型和位置
    的頭像 發(fā)表于 05-03 17:33 ?3875次閱讀
    <b class='flag-5'>MySQL</b>支持的三種<b class='flag-5'>數(shù)據(jù)類(lèi)型</b>

    MySQL為字段選擇合適數(shù)據(jù)類(lèi)型

    在使用MySQL創(chuàng)建數(shù)據(jù)表時(shí),經(jīng)常會(huì)遇到如何為字段選擇合適的數(shù)據(jù)類(lèi)型的問(wèn)題,接下來(lái)我們一起分析字符串、數(shù)值、日期數(shù)據(jù)類(lèi)型的選擇。
    的頭像 發(fā)表于 05-03 17:38 ?3327次閱讀
    <b class='flag-5'>MySQL</b>為字段選擇合適<b class='flag-5'>數(shù)據(jù)類(lèi)型</b>

    Struct結(jié)構(gòu)數(shù)據(jù)類(lèi)型

    Struct類(lèi)型是一種由多個(gè)不同數(shù)據(jù)類(lèi)型元素組成的數(shù)據(jù)結(jié)構(gòu),其元素可以是基本數(shù)據(jù)類(lèi)型,也可以是Struct、數(shù)組等復(fù)雜數(shù)據(jù)類(lèi)型以及PLC
    的頭像 發(fā)表于 07-25 17:02 ?3958次閱讀

    結(jié)構(gòu)數(shù)據(jù)類(lèi)型(Struct)及應(yīng)用案例

    Struct數(shù)據(jù)類(lèi)型使用非常靈活,隨時(shí)可以使用,但是相對(duì)于PLC數(shù)據(jù)類(lèi)型 (UDT) 有以下缺點(diǎn),所以建議需要使用Struct類(lèi)型時(shí),可以使用PLC數(shù)據(jù)類(lèi)型(UDT)代替。
    的頭像 發(fā)表于 07-27 16:10 ?2777次閱讀

    MySQL中如何存儲(chǔ)IP地址

    在看高性能MySQL第3版(4.1.7節(jié))時(shí),作者建議當(dāng)存儲(chǔ)IPv4地址時(shí),應(yīng)該使用32位的無(wú)符號(hào)整數(shù)(UNSIGNED INT)來(lái)存儲(chǔ)IP地址,而不是使用字符串。 但是沒(méi)有給出具體原
    的頭像 發(fā)表于 08-11 11:02 ?1485次閱讀

    什么是數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    常用的3種數(shù)據(jù)類(lèi)型:1、Python數(shù)據(jù)類(lèi)型第一種:字符串(str)。 2、Python數(shù)據(jù)類(lèi)型第二種:整數(shù)(int)。 3、Python數(shù)據(jù)類(lèi)型第三種:浮點(diǎn)數(shù)(float)。
    的頭像 發(fā)表于 02-23 15:21 ?2651次閱讀

    定義數(shù)據(jù)類(lèi)型

    在運(yùn)算之前我們必須首先定義出數(shù)據(jù)類(lèi)型,定義出腳本支持的數(shù)據(jù)類(lèi)型,這是運(yùn)算的基礎(chǔ)。 這一小節(jié)我們將定義出數(shù)據(jù)類(lèi)型,在這里我們暫時(shí)定義四個(gè)數(shù)據(jù)類(lèi)型:
    的頭像 發(fā)表于 03-03 10:10 ?1931次閱讀

    PLC數(shù)據(jù)類(lèi)型的種類(lèi) 常見(jiàn)的轉(zhuǎn)換方法

      PLC數(shù)據(jù)類(lèi)型是指編程軟件中用來(lái)表示變量、常量、對(duì)象等數(shù)據(jù)類(lèi)型。不同的PLC軟件可能會(huì)支持不同的數(shù)據(jù)類(lèi)型,但常見(jiàn)的PLC
    發(fā)表于 03-17 17:41 ?4.1w次閱讀

    MySQL數(shù)據(jù)庫(kù)的url地址

    (Protocol):MySQL數(shù)據(jù)庫(kù)使用的協(xié)議通常是MySQL自定義的協(xié)議,它使用TCP/IP協(xié)議在客戶端和服務(wù)器之間進(jìn)行通信。在URL地址
    的頭像 發(fā)表于 12-06 10:58 ?3553次閱讀

    plc數(shù)據(jù)類(lèi)型怎么理解和應(yīng)用

    PLC(可編程邏輯控制器)是一種工業(yè)自動(dòng)化設(shè)備,用于控制機(jī)械和工業(yè)過(guò)程。在PLC編程中,數(shù)據(jù)類(lèi)型是非常重要的概念,因?yàn)樗鼪Q定了程序中數(shù)據(jù)的存儲(chǔ)和處理方式。正確理解和應(yīng)用PLC數(shù)據(jù)類(lèi)型是編寫(xiě)有效、可靠
    的頭像 發(fā)表于 12-19 11:39 ?6812次閱讀