在创建一个简单(临时)MySQL表时,从同一源表的同一列中获取数据,两个结果列将以不同的CHARACTER SET结束并产生默认的COLLATION设置:
mysql> CREATE TABLE tempDates
SELECT SUBDATE(MAX(EventDate), INTERVAL 90 DAY) AS StartDate,
MAX(EventDate) AS EndDate FROM james_bond_007
WHERE EventCategory = 'Successful_Kills';
以下是显示结果表结构的输出:
mysql> SHOW CREATE TABLE tempDates;
CREATE TABLE `tempDates` (
`StartDate` varchar(29) CHARACTER SET utf8 DEFAULT NULL,
`EndDate` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我运行了一个alter table命令,但没有改变:
ALTER TABLE tempdates CHARACTER SET latin1 COLLATE latin1_swedish_ci;
从好奇的角度来看,我想知道为什么会发生这种情况,从实际的角度来看,我怎么能做到这一点呢?
我想要的结果是所有列都有服务器默认值:CHARACTER SET latin1 COLLATE latin1_swedish_ci
更好的方法是在所有列上强加服务器默认值,这样我就不必在以后的类型查询中键入超出我想要的内容。