MySql修改字段类型和大小

本文介绍了在MySQL数据库中修改表字段类型和大小的两种常见场景:一是处理第三方推送数据导致的字段大小不足问题,二是优化日志表以记录更长的错误信息。作者提供了ALTERTABLE语句示例,并讨论了处理数据异常的方法。

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 '失败信息';

修改字段后查看表结构:

查看表结构

 describe xx_user;

查看创建表sql

show create table xx_user;

删除索引:

//  方式一:
ALTER  TABLE  表名称  DROP  索引名称;
// 方式二
DROP  INDEX  索引名称  ON  表名称;

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

### 修改 MySQL 字段大小的语法示例 在 MySQL 中,修改字段大小可以通过 `ALTER TABLE` 语句实现。以下是具体的语法注意事项: #### 语法 ```sql ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(新大小); ``` #### 示例 假设有一个名为 `products` 的表,其中包含一个名为 `price` 的字段,其数据类型为 `DECIMAL(8,2)`。现在需要将该字段的精度从 `(8,2)` 修改为 `(10,2)`。 ```sql ALTER TABLE products MODIFY COLUMN price DECIMAL(10,2); ``` 此操作会将 `price` 字段的精度调整为 `10` 位整数部分 `2` 位小数部分[^4]。 #### 注意事项 1. **数据类型的兼容性**:确保新数据类型的长度能够容纳现有数据。如果新的字段大小不足以存储现有数据,可能会导致数据截断或丢失。 2. **数据备份**:在修改表结构之前,建议对数据进行备份,以防止意外问题的发生。 3. **索引影响**:如果该字段上有索引,修改字段大小可能会影响索引的性能或需要重新创建索引[^4]。 ### 索引的影响 当修改字段大小时,如果该字段被用作索引的一部分,则可能需要重建索引。这是因为索引的结构依赖于字段的定义。例如,如果字段大小增加或减少,索引的存储方式可能需要调整[^3]。 #### 检查索引并重建索引 以下是一个检查索引并重建索引的示例: ```sql -- 查看表的索引信息 SHOW INDEX FROM products; -- 删除受影响的索引 ALTER TABLE products DROP INDEX 索引名; -- 修改字段大小 ALTER TABLE products MODIFY COLUMN price DECIMAL(10,2); -- 重新创建索引 ALTER TABLE products ADD INDEX 索引名 (price); ``` 通过以上步骤,可以确保字段大小修改后索引仍然有效。 ### 总结 在 MySQL 中,修改字段大小的核心语法是使用 `ALTER TABLE ... MODIFY COLUMN`。同时需要注意数据类型的兼容性、数据备份以及索引的影响。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值