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


相关推荐

  • 〖Python零基础入门篇④〗- Pycharm插件安装与常用的插件

    〖Python零基础入门篇④〗- Pycharm插件安装与常用的插件插件是安装在特定程序上软件组件,以增强程序某项功能。一个好的IDE都会提供插件平台,允许第三方在遵循插件平台集成条款的前提下,使用插件平台对外提供的能力,扩展出更广泛更丰富的功能。PyCharm提供了大量商业与免费插件,内容涉及了方方面面,开发者根据工作的实际需要,可以在Marketplace搜索对应的插件,合理的使用正确插件,将极大的提高开发效率,并且保证代码质量。

    2022年6月24日
    35
  • java开发官方资源下载网址大全(持续更新)「建议收藏」

    java开发官方资源下载网址大全(持续更新)「建议收藏」1、下载mysql数据库驱动包网址:https://downloads.mysql.com/archives/c-j/

    2022年7月7日
    63
  • JSP技术简介

    JSP技术简介1JSP技术的特征JSP技术所开发的web应用程序是基于Java的,它拥有Java跨平台的特性,以及业务代码分离,组建重用,基础Javaservlet功能和预编译功能。1)跨平台由于JSP是基于Java语言的,因而它可以使用Java的API,所以也是跨平台的,可以应用在Windows、Linux、Mac和Solaris。2)业务代码分离…

    2022年6月28日
    35
  • 免费的ASP.NET AJAX 培训

    免费的ASP.NET AJAX 培训  好久没有写blog了,在这里感慨一下先 ;-))  最近BradAbrams 做了个关于ajax的E-Learning ,内容通俗易懂,估计这个教程2个小时可以完成。在学Ajax的朋友不妨看一下;点击here ,关于这个elearning的详细信息FreeASP.NETAJAXOnlineTraining在这里也郁闷一下,在asp.netajax1.0中列表

    2025年10月26日
    5
  • n8n自动化变现实战课(入门+进阶+选修):12个完整案例+JSON文件,助你高效提升工作流效率

    n8n自动化变现实战课(入门+进阶+选修):12个完整案例+JSON文件,助你高效提升工作流效率

    2026年3月13日
    2
  • java android实例_Android开发精典案例60个

    java android实例_Android开发精典案例60个【实例简介】Android开发精典案例60个【实例截图】【核心代码】2-1(Activity生命周期)3-1(Button与点击监听器)3-10-1(列表之ArrayAdapter适配)3-10-2(列表之SimpleAdapter适配)3-11(Dialog对话框)3-12-5(Activity跳转与操作)3-12-6(横竖屏切换处理)3-3(ImageButton图片按钮)3-4(EditTe…

    2022年6月17日
    29

发表回复

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

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