将ORACLE数据迁移至MYSQL时,凡是ORACLE中带default的,值为 to_char(sysdate,'d')
即取当前日期的WEEK对应的数值时,都发生错误,请问在MYSQL中建该类字段的时候default该如何写?

解决方案 »

  1.   

    很遗憾,MYSQL不支持除了TIMSTAMP外的变量为默认值,仅支持常数或者TIMESTAMP为默认值。
      

  2.   

    好吧,默认值不能加函数,那我就用触发器做,但是又碰到了问题。在同一服务器上的TEST数据库新建表A1, 再建触发器
    [SQL]CREATE TABLE `a1` (
      `createtime` datetime DEFAULT CURRENT_TIMESTAMP,
      `week` char(1) DEFAULT NULL,
      `name` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    受影响的行: 0
    时间: 0.019s[SQL]CREATE TRIGGER `default_week` BEFORE INSERT ON `a1` FOR EACH ROW begin
      set new.week=date_format(current_timestamp,'%w');
    end;
    受影响的行: 0
    时间: 0.006s
    结果能成功,可是同样的语句在真实库上运行时候却报错:
    [SQL]CREATE TABLE `a1` (
      `createtime` datetime DEFAULT CURRENT_TIMESTAMP,
      `week` char(1) DEFAULT NULL,
      `name` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    受影响的行: 0
    时间: 0.020s[SQL]CREATE TRIGGER `default_week` BEFORE INSERT ON `a1` FOR EACH ROW begin
      set new.week=date_format(current_timestamp,'%w');
    end;
    [Err] 1142 - TRIGGER command denied to user 'jjwgps'@'PC201310161843' for table 'a1'
    用户在TEST和JJWGPS上面都是一样的权限,
    GRANT USAGE ON *.* TO 'jjwgps'@'%' IDENTIFIED BY PASSWORD '*89CB0F200366ECF3E713308AABDBCA250F97FED4'
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON `jjwgps`.* TO 'jjwgps'@'%'为什么同样的表,同样的权限,一个可以一个不可以呢,哪位大神帮我看看呀?
      

  3.   

    分别在两台服务器上执行 show grants; 然后对比结果。
    以为是相同的权限可以未必如此。检查完后就容易下结论了。