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文章的小伙伴应该知道我说过,当我们数据量小的时候你是不用考虑这些问题的,但是当我们面临的数据量大时这是不得不面对的问题,因为小小的优化都有可能带来大大性能提升,这也是为什么面试时,面试官不仅要深入聊底层,而且还在某些点上那么较真,是不无道理滴。

猜你喜欢

转载自blog.csdn.net/A_hxy/article/details/106727096