MySql修改字段类型和大小

MySql 修改表字段的类型和大小

原因:

1,在我们设计表的时候,有时设计表字段女的大小和类型的时候,有时可能不合适,需要修改字段的大小
2,修改表字段的常见2种,第一种修改大小,第二种修改数据类型

sql语句

第一种 修改字段的大小

原因是: 第三方推送数据,这边接收数据,测试下那边recommendation 这个字段是50个左右,之前设置是varchar(100)显然不够,根据Mysql的版本不同,汉字占字节不同 varchar(100) 大概存储25个汉字
修改表字段的大小如下:

ALTER TABLE cm_server_venture_network
MODIFY COLUMN recommendation VARCHAR(500) COMMENT '修改建议';

第二种修改 字段的类型

**原因是:**本地创建一个日志表用于记录每次推送数据的日志,判断是否成功用于后期运维,方便排查问题。

CREATE TABLE `cm_xx_push_data_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `push_source` tinyint(4) DEFAULT '1' COMMENT '接收推送数据来源1:xx 2:yy 3:zz ',
  `status` tinyint(4) NOT NULL COMMENT '任务状态 0:开始 1:结束',
  `success` tinyint(4) DEFAULT '0' COMMENT '任务状态 0:失败 1:成功',
  `error` varchar(2000) DEFAULT NULL COMMENT '失败信息',
  `times` int(11) NOT NULL COMMENT '耗时(单位:毫秒)',
  `push_time` datetime DEFAULT NULL COMMENT '推送时间 yyyy-mm-dd hh:m24:ss',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间 yyyy-mm-dd hh:m24:ss',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接收推送数据日志表';

数据异常在error里面记录错误信息,开始时候记录错误信息,有时可以有时不可以,报错如下
{“timestamp”:“2024-02-02T05:31:38.592+0000”,“status”:500,“error”:“Internal Server Error”,“message”:“org.springframework.dao.DataIntegrityViolationException: \n### Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘error’ at row 1\n### The error may exist in com/dx/major/platform/mapper/AcceptPushDataLogMapper.java (best guess)\n### The error may involve com.dx.major.platform.mapper.AcceptPushDataLogMapper.updateById-Inline\n### The error occurred while setting parameters\n### SQL: UPDATE cm_xxt_push_data_log SET push_source=?, status=?, success=?, error=?, times=?, push_time=? WHERE id=?\n### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘error’ at row 1\n; Data truncation: Data too long for column ‘error’ at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘error’ at row 1”,“path”:“/openapi/tyy/self/innovate/equipment/inspection/list”}

大概意思说 这个说error字段太小了,不能记录错误信息

解决方案一:
1,修改字段的大小

alter table cm_xxx_push_data_log modify column error varchar(5000) comment '失败信息';

2,修改错误记录地方异常截取

// 异步编排使用方法:
 CompletableFuture.allOf(xx, yy).exceptionally(e -> {
            log.error("xxx的异步出现了异常:{}", e);
            // 特意做的截取
            xxDataLogEntity.setError(e.getMessage().substring(0, Math.max(4000, e.getMessage().length())));
            acceptPushDataLogService.updateById(acceptPushDataLogEntity);
            return null;
        }).join();

让对方推送下数据,还是报错,怎么回事???有时错误里面会有中文,无形当中增加字段的大小
干脆修改字段类型 为longtext 类型
如下

alter table cm_xxx_push_data_log modify column `error` longtext  comment '失败信息';

喜欢我的文章的话,点个阅读或者点个点赞,是我编写博客的动力,持续更新中

你可能感兴趣的:(mysql)