mediumtext_text长度不够用,改为mediumtext感觉 又太大,有没什么方法?

mediumtext_text长度不够用,改为mediumtext感觉 又太大,有没什么方法?楼主先要搞清楚,text和longtext这些都是可变长度的字段类型.这是phpMyAdmin里的说明:text:最多存储65535(2^16-1)字节的文本字段,存储时在内容前使用2字节表示内容的字节数.longtext:最多存储4294967295字节即4GB(2^32-1)的文本字段,存储时在内容前使用4字节表示内容的字节数.也就是说,你在longtext类型的字段里只存1个字符,占用空…

大家好,又见面了,我是你们的朋友全栈君。

楼主先要搞清楚,text和longtext这些都是可变长度的字段类型.

这是phpMyAdmin里的说明:

text: 最多存储65535(2^16-1)字节的文本字段,存储时在内容前使用2字节表示内容的字节数.

longtext: 最多存储4294967295字节即4GB(2^32-1)的文本字段,存储时在内容前使用4字节表示内容的字节数.

也就是说,你在longtext类型的字段里只存1个字符,占用空间只不过是4个字节加上1个字符占用的字节数,而不是占用4个GB的存储空间,4个GB指的是该字段能容纳的最大值.

最后就是有明显关系并且需要查询统计的多个量,不建议全部塞到一个字段里面.像不确定的会话数据(如JSON串)这类东西,倒是可以一股脑存到一个longtext字段.比如我的会话表:

DROP TABLE IF EXISTS `io_session`;

CREATE TABLE IF NOT EXISTS `io_session` (

`user_id` bigint unsigned NOT NULL COMMENT ‘用户编号’,

`data` longtext NOT NULL COMMENT ‘会话内容’,

`create_time` bigint unsigned NOT NULL COMMENT ‘创建时间’,

`update_time` bigint unsigned NOT NULL COMMENT ‘更新时间’,

`version` smallint unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘版本号’,

`flag` tinyint NOT NULL DEFAULT ‘1’ COMMENT ‘版本号递增递减方向标识’,

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT=’会话表’;

// 填出会话数据到数组 $io[‘user’][‘session’]

function io_session_get() {

global $io;

if(!isset($io[‘user’][‘id’])) return false;

$db = io_db();

$table = IO_DB_PREFIX.’session’;

$sql = “SELECT * FROM `{$table}` WHERE `user_id` = ?”;

$stmt = $db->prepare($sql); $stmt->execute(array($io[‘user’][‘id’]));

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

if(!isset($rows[0])) return false;

$data = json_decode($rows[0][‘data’], true);

// JSON解码失败时,把会话内容重置为空

$io[‘user’][‘session’][‘data’] = ($data) ? $data : array();

$io[‘user’][‘session’][‘version’] = $rows[0][‘version’];

$io[‘user’][‘session’][‘flag’] = $rows[0][‘flag’];

//register_shutdown_function(‘io_session_set’);

}

// 将会话数据写入到数据库

function io_session_set() {

global $io;

if(!isset($io[‘user’][‘session’])) return false;

$data = json_encode($io[‘user’][‘session’][‘data’]);

$db = io_db();

$table = IO_DB_PREFIX.’session’;

switch(true) {

// version 类型 smallint 范围 0 到 65535

case ($io[‘user’][‘session’][‘flag’] == 1 && $io[‘user’][‘session’][‘version’] != 65535): {

$sql = “UPDATE `{$table}` SET `data` = ?, `version` = ?

WHERE `user_id` = ? AND `version` = ? AND `flag` = 1″;

$version_increase = true;

break;

}

case ($io[‘user’][‘session’][‘flag’] == 1 && $io[‘user’][‘session’][‘version’] == 65535): {

$sql = “UPDATE `{$table}` SET `data` = ?, `version` = ?, `flag` = -1

WHERE `user_id` = ? AND `version` = ? AND `flag` = 1″;

$version_increase = false;

break;

}

case ($io[‘user’][‘session’][‘flag’] == -1 && $io[‘user’][‘session’][‘version’] != 0): {

$sql = “UPDATE `{$table}` SET `data` = ?, `version` = ?

WHERE `user_id` = ? AND `version` = ? AND `flag` = -1″;

$version_increase = false;

break;

}

case ($io[‘user’][‘session’][‘flag’] == -1 && $io[‘user’][‘session’][‘version’] == 0): {

$sql = “UPDATE `{$table}` SET `data` = ?, `version` = ?, `flag` = 1

WHERE `user_id` = ? AND `version` = ? AND `flag` = -1″;

$version_increase = true;

break;

}

}

$stmt = $db->prepare($sql);

$stmt->execute(array(

$data,

$version_increase ? $io[‘user’][‘session’][‘version’] + 1 : $io[‘user’][‘session’][‘version’] – 1,

$io[‘user’][‘id’],

$io[‘user’][‘session’][‘version’],

));

return ($stmt->rowCount() == 0) ? false : true;

}

io_session_get();

var_export($io[‘user’][‘session’]);

$io[‘user’][‘session’][‘data’][‘date’] = date(‘Y-m-d H:i:s’);

io_session_set();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133468.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月1日 下午7:40
下一篇 2022年5月1日 下午7:40


相关推荐

  • Pycharm同时编辑多行、同时多行注释快捷键、批量更改某一个变量名、大小写不敏感设置、设置注释颜色

    Pycharm同时编辑多行、同时多行注释快捷键、批量更改某一个变量名、大小写不敏感设置、设置注释颜色1 Pycharm 同时编辑多行 alt shift ctral 鼠标左键 2 Pycharm 同时多行注释 多行选中后 ctrl

    2026年3月16日
    1
  • MVC框架模式与SpringMVC框架

    MVC框架模式与SpringMVC框架1 框架与设计模式框架 设计模式这两个概念很容易被人混淆 但其实这两者之间还是存在差别的 框架通常是代码重用 而设计模式是设计重用 nbsp 设计模式是对反复出现的问题的解决方案的描述 是一种思想用于处理细节的 比框架更加抽象 框架是已经用代码实现的 可以执行也可以复用 设计模式是比框架更小的元素 一个框架往往会包含一个或者多个设计模式 框架总是针对某一特定领域的 而设计模式则可以适用于各个

    2025年9月13日
    7
  • 《博弈论与生活》思维导图高中_生活与消费思维导图

    《博弈论与生活》思维导图高中_生活与消费思维导图前几天看了个综艺《决胜21天》,主要是体现21种博弈论模型的游戏,非常有启发意义。而且博弈论在商业领域、机器学习领域都会有应用,是职场中必须要了解和掌握的一门知识。正好找到了一个有意思的入门点。先入个门,之后再深入系统的学习这个领域。…

    2022年10月15日
    4
  • excel 树结构json_excel转换json的强大工具

    excel 树结构json_excel转换json的强大工具让excel支持表达复杂的json格式,将xlsx文件转成json。使用说明目前只支持.xlsx格式,不支持.xls格式。本项目是基于nodejs的,所以需要先安装nodejs环境。执行命令#Clonethisrepositorygitclonehttps://github.com/koalaylj/xlsx2json.git#Gointotherepositorycdxlsx…

    2022年6月12日
    46
  • Poetry(1)Poetry介绍与安装

    Poetry(1)Poetry介绍与安装介绍Poetry是Python中的依赖管理和打包工具,当然它也可以配置虚拟环境。它允许您声明项目所依赖的库,并为您管理(安装/更新)它们。之前一直使用virtualenvwrapper管理虚拟

    2022年7月29日
    29
  • 当前Activity跳转到另外一个Activity「建议收藏」

    当前Activity跳转到另外一个Activity「建议收藏」当前Activity跳转到另外一个ActivityStep1:创建firest_layout.xml文件.添加一个Button:<Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android…

    2022年5月11日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号