ERROR 1366 (HY000): Incorrect integer value: 'False' for column 'bd_ip' at row 1943555

来源:互联网 发布:js中的splice 编辑:程序博客网 时间:2024/06/03 15:46
    更改MySQL表的属性,前期没有考虑到性能问题,将存IP段的列设置了varchar类型,由于数据量询量不断增大,使用char类型存储IP地址不仅占用空间而且影响MySQL查询效率,在多表jion时性能差异就更明显了,所以存储ip用int类型,int只占用4个字节,因为省空间,空间就是效率,选用字段的一般原则是能用占用少字节的字段就不用大字段MySQL支持5个主要几个类型是tinyint,smallint,mediumint,int,bigint注:一般程序的字符集是gbk或者utf8,使用char类型跟字符集也有关系      gbk:一个字符占2字节   utf8:一个字符占3个字节查看本次测试环境1.当前MySQL版本mysql> select version();+------------+| version()  |+------------+| 5.6.28-log |+------------+1 row in set (0.02 sec)2.查询原表结构mysql> desc domain;+-----------+--------------+------+-----+---------+----------------+| Field     | Type         | Null | Key | Default | Extra          |+-----------+--------------+------+-----+---------+----------------+| id        | int(10)      | NO   | PRI | NULL    | auto_increment || bd_domain | varchar(255) | YES  | UNI | NULL    |                || bd_ip     | varchar(16) | YES   |     | NULL    |                |+-----------+--------------+------+-----+---------+----------------+3.创建测试表mysql> drop table t1;Query OK, 0 rows affected (0.08 sec)mysql> create table t1 select * from bd_domain;Query OK, 9053585 rows affected (3 min 44.47 sec)Records: 9053585  Duplicates: 0  Warnings: 0mysql> select bd_domain,bd_ip from t1 limit 6;+------------------------+-----------+| bd_domain              | bd_ip     |+------------------------+-----------+| 039b1ee.netsolhost.com | 0.0.0.0   || 03a6b7a.netsolhost.com | 0.0.0.0   || 03a6f57.netsolhost.com | 0.0.0.0   || 03bbec4.netsolhost.com | 0.0.0.0   || 0if1nl6.org            | 0.0.0.0   || 0x.x.gg                | 127.0.0.1 |+------------------------+-----------+6 rows in set (0.00 sec)4.查询新表T1结构,bd_ip列为varchar类型mysql> desc t1;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(10)      | NO   |     | 0       |       || bd_domain | varchar(255) | YES  |     | NULL    |       || bd_ip     | varchar(16)  | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+3 rows in set (0.00 sec)5.将t1表的列更改为无符号整形mysql> UPDATE `t1` SET bd_ip =  INET_ATON(bd_ip) WHERE INET_ATON(bd_ip) is NOT NULL;Query OK, 2588296 rows affected (2 min 2.10 sec)Rows matched: 2588296  Changed: 2588296  Warnings: 06.在执行alter的时候发现第1943555行数据有问题,一般来说可能是这列存在其他字符导致无法更改属性mysql> ALTER TABLE `t1` CHANGE `bd_ip` `bd_ip` INT UNSIGNED NOT NULL;ERROR 1366 (HY000): Incorrect integer value: 'False' for column 'bd_ip' at row 19435557.现在开始查找第1943555这行数据,t1表有900多万行数据,不太可能从图形化客户端直接查找,利用id范围来确定具体行数,在根据条件定位1943555行的数据mysql> select count(*) from t1;+----------+| count(*) |+----------+|  9053585 |+----------+1 row in set (3.41 sec)8.根据id范围来定位1943555这行数据,具体id分为可自行增减mysql> select count(*) from Mdomain where id<28553491;+----------+| count(*) |+----------+|  1943553 |+----------+1 row in set (0.55 sec)mysql>  select count(*) from Mdomain where id<28553498;+----------+| count(*) |+----------+|  1943555 |+----------+1 row in set (0.56 sec)9.定位之后查询这行数据,bd_ip此列有False值,因此我们在更改bd_ip列属性时会爆出错误mysql>  select bd_domain,bd_ip from t1 where id=28553497;+--------------------+-------+| bd_domain          | bd_ip |+--------------------+-------+| mysmiledoctors.com | False |+--------------------+-------+1 row in set (4.23 sec)10.更新1943555这列数据,将其更新为整形数据mysql> update  t1 set  bd_ip='0' where bd_ip='False';Query OK, 6465286 rows affected (4 min 17.47 sec)Rows matched: 6465286  Changed: 6465286  Warnings: 011.再次更改bd_ip列属性mysql> ALTER TABLE `t1` CHANGE `bd_ip` `bd_ip` INT UNSIGNED NOT NULL;Query OK, 9053581 rows affected (4 min 42.02 sec)Records: 9053581  Duplicates: 0  Warnings: 012.查查看t1表结构mysql>desc t1; +-----------+------------------+------+-----+---------+-------+| Field     | Type             | Null | Key | Default | Extra |+-----------+------------------+------+-----+---------+-------+| id        | int(10)          | NO   |     | 0       |       || bd_domain | varchar(255)     | YES  |     | NULL    |       || bd_ip     | int(10) unsigned | NO   |     | NULL    |       ||+-----------+------------------+------+-----+---------+-------+

阅读全文
1 0