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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle INSERT INTO SELECT

    Oracle INSERT INTO SELECTINSERTINTOtarget_table(col1,col2,col3)SELECTcol1,col2,col3FROMsource_tableWHEREcondition;

    2022年7月15日
    17
  • SpringBoot2.0集成WebSocket,实现后台向前端推送信息

    SpringBoot2.0集成WebSocket,实现后台向前端推送信息什么是WebSocket?-初次接触WebSocket的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什么好处?-答案很简单,因为HTTP协议有一个缺陷:***通信只能由客户端发起***,HTTP协议做不到服务器主动向客户端推送信息。https://github.com/moshowgame/spring-cloud-study/tree/master/spring-cloud-study-websocket

    2022年5月3日
    51
  • echarts图表在Tab页中width: 100%失效导致的第一个Tab页之后的Tab页图表不能正常显示的问题

    echarts图表在Tab页中width: 100%失效导致的第一个Tab页之后的Tab页图表不能正常显示的问题

    2021年11月22日
    50
  • 获取textview行数

    获取textview行数如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。这里提供一个间接的方法,通过StaticLayout来间接获取行数。下面是代码:publicstaticintgetTextViewLines(TextViewtextView,inttextViewWidth){intwidth=textViewWidt…

    2025年7月1日
    11
  • Pycharm 常用快捷键 for Mac

    Pycharm 常用快捷键 for Mac格式化代码 command option L 多行合并一行 control shift J 快速注释 取消注释 crtl 鼠标指针上方插入空行 command option enter 鼠标指针下方插入空行 shift enter 上下移动选中代码 shift option 上 下上下移动函数 shift command 上 下复制选中的代码 command D 折叠选中函数 或者鼠标指针放在函数名 command 查找 全局

    2025年9月23日
    3
  • 使用Intellij Idea打包java为可执行jar包

    使用Intellij Idea打包java为可执行jar包自己在实际工作中的需要,使用Idea打包项目为可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位步骤:1.选中Java项目工程名称,在菜单中选择 File->projectstructure… (快捷键Ctrl+Alt+Shift+S)。2.在弹出的窗口中左侧选中”Artifacts”,点击”+”选择ja

    2022年6月17日
    51

发表回复

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

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