Maison > Questions et réponses > le corps du texte
新手问题,见笑了。
我想让每篇文章都有一个独立的访问统计,访问统计信息单独一个字段。
1条访问数据约为450个字符。几乎都是英文数字,只有ip地址是中文。
text长度是65535,相当约145条。感觉 太少了。
如果改为mediumtext感觉又太大,用不完,占用空间。
请教有没什么方法?
怪我咯2017-05-16 13:09:57
Pour les statistiques d'accès, vous devez concevoir un tableau séparé. Le définir comme champ n’est pas pratique à maintenir. Prenons une montre séparée
Si vous souhaitez ajuster le champ de manière appropriée, l'aide est l'ID de l'article
ringa_lee2017-05-16 13:09:57
mediumtext
比text
只多1 Byte
,如果你觉得这就算太大,用不完,占用空间
, alors je ne trouve pas de meilleur moyen
大家讲道理2017-05-16 13:09:57
L'auteur doit d'abord comprendre que le texte et le texte long sont des types de champs de longueur variable.
Voici la description dans phpMyAdmin :
text : un champ de texte qui peut stocker jusqu'à 65 535 (2 ^ 16-1) octets et qui est stocké. in Utilisez 2 octets avant le contenu pour indiquer le nombre d'octets du contenu.
texte long : un maximum de 4294967295 octets, soit 4 Go (2^32-1) de champs de texte peuvent être stockés. Lors du stockage, utilisez 4 octets avant le contenu. pour indiquer le nombre d'octets du contenu.
En d'autres termes, si vous ne stockez qu'1 caractère dans un champ de texte long, l'espace occupé n'est que de 4 octets plus le nombre d'octets occupés par 1 caractère, au lieu d'occuper 4 Go de stockage. espace, 4 Go fait référence à la valeur maximale que le champ peut contenir.
Enfin, il existe plusieurs quantités qui sont évidemment liées et doivent être interrogées et comptées. Il n'est pas recommandé de toutes les regrouper dans un seul champ. Des éléments tels que des données de session incertaines (telles que des chaînes JSON) peuvent être stockées dans un champ de texte long. Par exemple, je table de conversation :
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();