MySQL:關於手機號碼帶來的問題,探究本質是數值類型選擇(帶你如何解決和優化)

不知道你在開發中有沒有遇見過下面這種報錯——列的值超出範圍

1264 - Out of range value for column ‘phone’ at row 1

如果遇見過,那麼你應該也是因爲手機號碼用了 int 類型,爲什麼會這樣呢?

因爲int類型的值最大寬度不能超過11位,否則溢出就會報上面那個錯,有看過我下面這篇文章的小夥伴可能會發現我手機號用的是varchar(實在是不得已而爲之啊,當時就是用了int給我報錯整蒙了,所以匆忙解決,但是回過頭來,varchar它佔用空間大,影響性能啊!咱還是要科學解決的,畢竟這不是要做一個講究的 碼農 程序員嘛

教你使用MySQL僅調用一個存儲過程創建三千萬條數據

那用什麼呢?
bigint 數值類型, 你可能會有一堆問號 ???,用 char(11)也可以吧!那讓我們回到那個佔用空間的問題,我們選擇合適的類型不就是爲了解決這個問題的嗎,你想想我們char常用的字符集無非就是GBK或UTF8,而GBK是2個字節,更爲常用的UTF8是3個字節,11位的手機號碼 * UTF8的3個字節 = 33個字節。而我們 Bigint 默認位數是20,才8個字節,哪個更划算不用我多說了吧,傻瓜。

最後:

上面所說的手機號碼帶來的問題其實是數值類型選擇的問題,明明有很多種方法可以選擇,偏偏要選擇 bigint 數值類型這一種這麼較真呢,其實看過我過往幾篇MySQL文章的小夥伴應該知道我說過,當我們數據量小的時候你是不用考慮這些問題的,但是當我們面臨的數據量大時這是不得不面對的問題,因爲小小的優化都有可能帶來大大性能提升,這也是爲什麼面試時,面試官不僅要深入聊底層,而且還在某些點上那麼較真,是不無道理滴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章