Specified key was too long; max key length is 1000 bytes

--
-- 表的结构 `ecs_goods_activity`
--

DROP TABLE IF EXISTS `ecs_goods_activity`;
CREATE TABLE `ecs_goods_activity` (
`act_id` mediumint(8) unsigned NOT NULL auto_increment,
`act_name` varchar(255) NOT NULL,
`act_desc` text NOT NULL,
`act_type` tinyint(3) unsigned NOT NULL,
`goods_id` mediumint(8) unsigned NOT NULL,
`product_id` mediumint(8) unsigned NOT NULL default '0',
`goods_name` varchar(255) NOT NULL,
`start_time` int(10) unsigned NOT NULL,
`end_time` int(10) unsigned NOT NULL,
`is_finished` tinyint(3) unsigned NOT NULL,
`ext_info` text NOT NULL,
PRIMARY KEY (`act_id`),
KEY `act_name` (`act_name`,`act_type`,`goods_id`)
) ENGINE=MyISAM;

关于FLUSH PRIVILEGES的使用

很多人在MySQL里面乱用FLUSH PRIVILEGES,你知道吗?包括从前的我,但是FLUSH PRIVILEGES你真的知道应该在什么场合使用么?

根据官方文档的如下链接内容可知:
https://dev.mysql.com/doc/refman/5.6/en/privilege-changes.html

当mysqld启动时,所有的权限都会被加载到内存中。
如果使用GRANT/REVOKE/SET PASSWORD/RENAME USER命令来更改数据库中的权限表,mysqld服务器将会注意到这些变化并立即加载更新后的权限表至内存中,即权限生效;
如果使用INSERT/UPDATE/DELETE语句更新权限表,则内存中的权限表不会感知到数据库中权限的更新,必须重启服务器或者使用FLUSH PRIVILEGES命令使更新的权限表加载到内存中,即权限需在重启服务器或者FLUSH PRIVILEGES之后方可生效。

权限生效的含义:
1、表级别/列级别的权限,当更新后的权限加载至内存表中,已存在的会话下一次请求时可使用该权限,在修改权限后的建立的会话则立即生效;
2、数据库级别的权限,当更新后的权限加载至内存表中,已存在会话下一次使用USE db_name后,可使用该权限,在修改权限后的建立的会话则立即生效;
3、全局权限或者修改密码,当更新后的权限加载至内存表中,需要在下一次登录mysqld后,可使用该权限或密码,对已存在会话不起作用。

MySQL复制表结构和内容到另一张表

复制表结构及数据到新表 

create table 新表 select * from 旧表

只复制表结构到新表

select table 新表
select * from 旧表 where 1=2

即:让where条件不成立.

方法二:(低版本的MySQL不支持,MySQL 4.0.25不支持,MySQL 5已经支持了)

create table 新表
like 旧表 

复制旧表的数据到新表(假设两个表结构一样)

insert into 新表
select * from 旧表 

复制旧表的数据到新表(假设两个表结构不一样)

insert into 新表(字段1,字段2,…….)
select 字段1,字段2,…… from 旧表