# # Test with a saved MyISAM table from 4.1 # # Everything _looks_ fine SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(2) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 # Run CHECK TABLE, it should indicate table need a REPAIR TABLE CHECK TABLE t1 FOR UPGRADE; Table Op Msg_type Msg_text test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! # Run REPAIR TABLE to alter the table and repair the YEAR(2) fields REPAIR TABLE t1; Table Op Msg_type Msg_text test.t1 repair Warning YEAR(2) column type is deprecated. Creating YEAR(4) column instead. test.t1 repair status OK # Now check it's back to normal SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 SELECT * FROM t1; y2 i i_chk y4 y4_chk 1901 1901 1 1901 1901 2001 1 1 2001 2001 1970 1970 70 1970 1970 1970 70 70 1970 1970 2000 2000 0 2000 2000 0000 0 0 0000 0000 2069 2069 69 2069 2069 2069 69 69 2069 2069 2155 2155 55 2155 2155 2055 55 55 2055 2055 DROP TABLE t1; # ALTER TABLE ... FORCE should convert YEAR(2) to YEAR(4) ALTER TABLE t1 FORCE; Warnings: Warning 1818 YEAR(2) column type is deprecated. Creating YEAR(4) column instead. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; # # Test with a saved MyISAM table from 5.5 # # Everything _looks_ fine SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(2) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 # Run CHECK TABLE, it should indicate table need a REPAIR TABLE CHECK TABLE t1 FOR UPGRADE; Table Op Msg_type Msg_text test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! # Run REPAIR TABLE to alter the table and repair the YEAR(2) fields REPAIR TABLE t1; Table Op Msg_type Msg_text test.t1 repair Warning YEAR(2) column type is deprecated. Creating YEAR(4) column instead. test.t1 repair status OK # Now check it's back to normal SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 SELECT * FROM t1; y2 i i_chk y4 y4_chk 1901 1901 1 1901 1901 2001 1 1 2001 2001 1970 1970 70 1970 1970 1970 70 70 1970 1970 2000 2000 0 2000 2000 0000 0 0 0000 0000 2069 2069 69 2069 2069 2069 69 69 2069 2069 2155 2155 55 2155 2155 2055 55 55 2055 2055 DROP TABLE t1; # ALTER TABLE ... FORCE should convert YEAR(2) to YEAR(4) ALTER TABLE t1 FORCE; Warnings: Warning 1818 YEAR(2) column type is deprecated. Creating YEAR(4) column instead. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; # # Test with InnoDB table (with fake .frm file) # # Create InnoDB table with YEAR(4) columns ALTER TABLE t1 ENGINE=InnoDB; Warnings: Warning 1818 YEAR(2) column type is deprecated. Creating YEAR(4) column instead. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 FLUSH TABLE t1; # Replace YEAR(4) column metadata with YEAR(2) metadata SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(2) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 # Run CHECK TABLE, it should indicate table need a REPAIR TABLE CHECK TABLE t1 FOR UPGRADE; Table Op Msg_type Msg_text test.t1 check error Table rebuild required. Please do "ALTER TABLE `t1` FORCE" or dump/reload to fix it! # Run ALTER TABLE ... FORCE to alter the table and repair the YEAR(2) fields ALTER TABLE t1 FORCE; Warnings: Warning 1818 YEAR(2) column type is deprecated. Creating YEAR(4) column instead. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 DROP TABLE t1; # # Test mysql_upgrade tool # Warning: Using a password on the command line interface can be insecure. Warning: Using a password on the command line interface can be insecure. mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK mysql.general_log OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.innodb_index_stats OK mysql.innodb_table_stats OK mysql.ndb_binlog_index OK mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.proxies_priv OK mysql.servers OK mysql.slave_master_info OK mysql.slave_relay_log_info OK mysql.slave_worker_info OK mysql.slow_log OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK Warning: Using a password on the command line interface can be insecure. Warning: Using a password on the command line interface can be insecure. Warning: Using a password on the command line interface can be insecure. mtr.global_suppressions OK mtr.test_suppressions OK test.t1 error : Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! Repairing tables test.t1 Warning : YEAR(2) column type is deprecated. Creating YEAR(4) column instead. status : OK SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `y2` year(4) DEFAULT NULL, `i` int(11) DEFAULT NULL, `i_chk` int(11) DEFAULT NULL, `y4` year(4) DEFAULT NULL, `y4_chk` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; #