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


相关推荐

  • JVM: GC过程总结(minor GC 和 Full GC)「建议收藏」

    一minorGC和FullGC区别新生代GC(MinorGC):指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。老年代GC(MajorGC/FullGC):指发生在老年代的GC,出现了MajorGC经常会伴随至少一次的MinorGC(并非绝对),MajorGC的速度一般会比MinorGC的慢10倍以上。二minorGC过程详解1在初始阶段,新创建的对象被分配到Eden区,survivor的两块空间都为空。

    2022年4月12日
    37
  • Django Django_django queryset合并

    Django Django_django queryset合并前言我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作。其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager

    2022年7月28日
    1
  • Chrome performance_开发者模式玩游戏流畅

    Chrome performance_开发者模式玩游戏流畅主要有4方面:(对照下图)1.控制按钮。2.overview。页面性能的高级汇总(FPS:帧率,CPU:CPU占用,NET:网络请求)3.火焰图。CPU堆叠追踪的可视化(左侧名称是主线程的各种事件,Network:网络请求详细情况)4.数据统计。以图表的形式汇总数据(summary:统计报表,Bottom-Up:事件时长顺序,CallTree:事件调用顺序,Eventlog:事件发生的……

    2022年10月28日
    0
  • 明天准备离职了,面对照顾自己的领导,要这样说[通俗易懂]

    明天准备离职了,面对照顾自己的领导,要这样说

    2022年2月13日
    52
  • json对象转换为实体类_对象和实体的区别

    json对象转换为实体类_对象和实体的区别//importcom.yonyou.sscip.gson.Gson;//jSONObject数据{“pk_org”:”TEST”,”pk_group”:”TEST”,”code”:”a”,”name”:”a”}//1、创建Gson对象 Gsongson=newGson(); //2、调用toJson(Object)将对象转为字符串 StringJsonStr=gson.toJson(json); System.out.printl.

    2022年9月7日
    0
  • FM &FFM:深入理解FM与FFM「建议收藏」

    FM &FFM:深入理解FM与FFM「建议收藏」0.引言针对类别变量进行oner-hot编码后的高维稀疏矩阵M,可以表示如下:可以看出,经过One-Hot编码之后,大部分样本数据特征是比较稀疏的,One-Hot编码的另一个特点就是导致特征空间大。例如,电影品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关…

    2022年6月3日
    24

发表回复

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

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