mysql 数据类型_INT

Posted 2woods

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 数据类型_INT相关的知识,希望对你有一定的参考价值。

整型分类:

1.tinyint 1Bytes -128~127(255)
2.smallint 2Bytes -32768~32676(65535)
3.mdeiumint 3Bytes -8388608~8388607(16777215)
4.int 4Bytes -2147483648~2147483647(4294967295,42亿)
5.bigint 8Bytes -9223372036854775808~9223372036854775807(18446744073709551615)

int转bigint

int列如果是主键不能online DDL 转成bigint,onlineDDL:ptosc(更容易导致主从数据延时,执行过程报错,无法从上一个位置开始,只能重头开始)和gh-ost(推荐,因基于binlog,可以随时停止或继续).

容易误解

int(11),11是修饰符,不是长度限制,int(8)zerofill zerofill也是修饰符,左侧补零.

溢出:

cast(9223372036854775807 as unsigned) 改为不符号

常见特别格式的数据存储类型:IPv4地址推荐用INT存储:

select length(‘255.255.255.255‘)
+---------------------------+
| length(‘255.255.255.255‘) |
+---------------------------+
| 15 |
+---------------------------+
[email protected] [(none)]>select inet_aton(‘255.255.255.255‘); //IPv4最大值,正好是int的无符号数最大值.
+------------------------------+
| inet_aton(‘255.255.255.255‘) |
+------------------------------+
| 4294967295 |
+------------------------------+
[email protected] [(none)]>select inet_ntoa(4294967295);
+-----------------------+
| inet_ntoa(4294967295) |
+-----------------------+
| 255.255.255.255 |
+-----------------------+

IPv6和IPv4共用的方法(数据类型为VARBINARY(16)

唯一的原因是mysql函数同时适用于IPv6和IPv4地址。 BINARY(16)只适用于存储IPv6地址,并保存一个字节。在处理IPv6和IPv4地址时应使用VARBINARY(16)):

[email protected] [(none)]>SELECT HEX(INET6_ATON(‘fdfe::5a55:caff:fefa:9089‘));
+----------------------------------------------+
| HEX(INET6_ATON(‘fdfe::5a55:caff:fefa:9089‘)) |
+----------------------------------------------+
| FDFE0000000000005A55CAFFFEFA9089 |
+----------------------------------------------+
1 row in set (0.00 sec)
[email protected] [(none)]>SELECT HEX(INET6_ATON(‘192.168.9.1‘));
+--------------------------------+
| HEX(INET6_ATON(‘192.168.9.1‘)) |
+--------------------------------+
| C0A80901 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT INET6_NTOA(INET6_ATON(‘fdfe::5a55:caff:fefa:9089‘));
-> ‘fdfe::5a55:caff:fefa:9089‘
mysql> SELECT INET6_NTOA(INET6_ATON(‘192.168.9.1‘));
-> ‘192.168.9.1‘

mysql> SELECT INET6_NTOA(UNHEX(‘FDFE0000000000005A55CAFFFEFA9089‘));
-> ‘fdfe::5a55:caff:fefa:9089‘
mysql> SELECT INET6_NTOA(UNHEX(‘C0A80901‘));
-> ‘192.168.9.1‘

此外,时间戳也是推荐使用无符号int也存储.

select unix_timestamp();
[email protected] [(none)]>select unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
| 1539644023 |
+------------------+
1 row in set (0.00 sec)

[email protected] [(none)]>select from_unixtime(1539644023);
+---------------------------+
| from_unixtime(1539644023) |
+---------------------------+
| 2018-10-16 06:53:43 |
+---------------------------+
1 row in set (0.00 sec)






















































以上是关于mysql 数据类型_INT的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL_精讲数据库数据类型

MYSQL09_精讲数据库数据类型

HHF_MySQL数据类型_简述

mysql 批量更新数据库主键为int,bigint 类型,字段为自增类型

MongoDB-数据类型

如何将mysql数据库的表中字段类型为int(存放时间戳)改为datetime类型,并保证数据不知丢