开发者

MySQL warnings after column's datatype change

I've changed datatype of one column on my MyISAM MySQL table (over 3.5m records):

mysql> alter table `sometable` modify column `int_column` int(11) unsigned NOT NULL DEFAULT '0';

Before that my int_column was mediumint(8). After performing the query, I've got 377 warnings. Here is show warnings; query result:

mysql> show warnings;
+---------+------+----------------------------------------------------------+
| Level   | Code | Message                                                  |
+---------+------+----------------------------------------------------------+
| Warning | 1264 | Out of range value for column 'int_column' at row 19360   | 
| Warning | 1264 | Out of range value for column 'int_column' at row 33745   | 
| Warning | 1264 | Out of range value for column 'int_column' at row 181436  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 587071  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 596617  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 659837  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 668363  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 801450  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 827911  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 835083  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 853689  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 867848  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 922569  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 922633  | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1002626 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1095119 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1102957 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1183077 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1282318 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1308876 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1311981 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1313329 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1375981 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1468411 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1470989 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1552848 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1556220 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1613484 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1619116 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1664449 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1670895 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1685828 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1689845 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1690212 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1697586 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1701220 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1710764 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1716681 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1717857 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1721820 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1721848 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1736543 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1738177 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1745430 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1748732 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1750112 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1753833 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1753903 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1762801 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1765664 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1766269 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1768134 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1786470 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1788247 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1790305 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1792769 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1795158 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1800610 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1806786 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1808764 | 
| Warni开发者_开发百科ng | 1264 | Out of range value for column 'int_column' at row 1820163 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1828066 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1842223 | 
| Warning | 1264 | Out of range value for column 'int_column' at row 1844030 | 
+---------+------+----------------------------------------------------------+ 
64 rows in set (0.26 sec)

The question is obvious: how it is even possible that I allocate more bytes for integer field and all of a sudden it turns to be out of range?

There is no index on int_column (I don't know how it might be helpful, though).

The other question is: why show warnings has returned just 64 rows of 377? I'm all confused.

Thank you.


Your old datatype was signed, your new one is unsigned.

So you lost all negative numbers.

Show warnings has a limit to how many it will store. Use

SET max_error_count=....

To change it.

BTW, int(11) for unsigned is too large, it should be int(10). For signed you can have 11 characters because of the minus sign.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜