MYSQL的longtext字段能放多少数据?

本文介绍了如何解决MySQL中无法存储大于5MB数据的问题。通过调整Django model中的TextField配置及MySQL的max_allowed_packet参数,成功实现了大数据字段的存储。

生产上遇到问题,

同事说MYSQL里的字段放不下5m大小的数据。

于是,将django model里textfield里的max_length变长了。

依然无效,

于是,更改mysql的设置:

set global max_allowed_packet = 2*1024*1024*10

或是设置文件my.cnf里:

max_allowed_packet = 20M

退出mysql再进入,查看是否生效:

show VARIABLES like '%max_allowed_packet%';

解决问题。



MySQL 中,`longtext` 字段储方式主要与表的储引擎和一些配置参数有关。以下是不同场景下修改 `longtext` 字段储方式的方法: ### 基于储引擎层面 #### InnoDB 储引擎 InnoDB 储引擎中,`longtext` 字段储方式与 `innodb_file_per_table`、`innodb_large_prefix` 和 `innodb_page_size` 等参数有关。 若要将 `longtext` 储在单独的表空间文件中,可开启 `innodb_file_per_table` 参数。可通过以下命令查看当前设置: ```sql SHOW VARIABLES LIKE 'innodb_file_per_table'; ``` 若要开启,可在 `my.cnf` 或 `my.ini` 文件中添加或修改如下配置: ```plaintext innodb_file_per_table = 1 ``` 然后重启 MySQL 服务使配置生效。 要使用大前缀索引,可开启 `innodb_large_prefix` 参数。同样可先查看当前设置: ```sql SHOW VARIABLES LIKE 'innodb_large_prefix'; ``` 在配置文件中添加或修改配置: ```plaintext innodb_large_prefix = 1 ``` 使用大前缀索引时,还需配合合适的 `innodb_page_size`,可设置为 16K 或更大: ```plaintext innodb_page_size = 16384 ``` #### MyISAM 储引擎 MyISAM 储引擎下,`longtext` 字段储在 `.MYD` 数据文件中,储方式主要受 `myisam_data_pointer_size` 参数影响。可通过以下命令查看: ```sql SHOW VARIABLES LIKE 'myisam_data_pointer_size'; ``` 若要修改,可在配置文件中添加或修改: ```plaintext myisam_data_pointer_size = 6 ``` ### 基于表结构修改 可使用 `ALTER TABLE` 语句修改表结构,以影响 `longtext` 字段储方式。例如,将表的行格式修改为 `DYNAMIC` 或 `COMPRESSED`: ```sql ALTER TABLE your_table ROW_FORMAT = DYNAMIC; ``` 或者 ```sql ALTER TABLE your_table ROW_FORMAT = COMPRESSED; ``` 其中,`DYNAMIC` 行格式适合储大字段,`COMPRESSED` 行格式可压缩数据以节省空间。 ### 注意事项 在修改储方式前,建议备份相关数据,因为错误的操作可能会导致数据丢失。执行任何修改操作后,要进行充分测试,确保数据的完整性和应用程序的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值