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


相关推荐

  • leetcode55跳跃游戏_跳跃游戏leetcode

    leetcode55跳跃游戏_跳跃游戏leetcode给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标

    2022年8月8日
    9
  • 软件著作权的源代码_软件著作权源码被泄露

    软件著作权的源代码_软件著作权源码被泄露packagecom.example.shuoya;importjava.util.Set;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.database.Cursor;importandroid.data…

    2022年9月22日
    2
  • visual studio发生了未处理的异常_打印显示灾难性故障

    visual studio发生了未处理的异常_打印显示灾难性故障【IDE-VisualStudio】灾难性故障(异常来自HRESULT0x8000FFFFEUNEXPECT

    2022年9月15日
    1
  • 基于MeanShift的目标跟踪算法及实现

    基于MeanShift的目标跟踪算法及实现这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法【matlab/c两个版本】 一、简介    首先扯扯无参密度估计理论,无参密度估计也叫做非参数估计,属于数理统计的一个分支,和参数密度估计共同构成了概率密度估计方法。参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中这个条件很难达到

    2022年7月26日
    5
  • 证书签名验签以及加密解密

    证书签名验签以及加密解密签名,验签的理解(转) 一、公钥加密假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友x用我的公钥1加密了字…

    2022年5月2日
    219
  • 安卓手机转移数据到iOS_如何把旧电脑的资料转移到新电脑

    安卓手机转移数据到iOS_如何把旧电脑的资料转移到新电脑很多小白对“转移到iOS”应用程序不是非常熟悉,当购买了新iPhone之后不清楚如何从旧Android转移数据,那么一般来说分为几个步骤呢?现在从Android智能手机转移到iPhone比以前容易多了,这要归功于苹果早前发布的“转移到iOS”应用程序。下面小编带来如何把旧Android数据转移到iOS上,把旧Android数据转移到iOS教程。一起来看看吧!前期准备1、首先,…

    2022年9月17日
    2

发表回复

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

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