即使SELECT数据来自同一个源表和列,MySql表列也有不同的CHARSET和COLLATION?

时间:2016-01-12 23:31:58

标签: mysql character-encoding

在创建一个简单(临时)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

更好的方法是在所有列上强加服务器默认值,这样我就不必在以后的类型查询中键入超出我想要的内容。

1 个答案:

答案 0 :(得分:0)

@Rick James 这解决了我的问题所以我想标记它的答案。

如果你有一个时刻,或许可以解释为什么? (给我另一个借口来支持你并接受你的回答)