recherche

Maison  >  Questions et réponses  >  le corps du texte

php - La longueur du texte n'est pas suffisante. Le changer en mediumtext semble trop volumineux.

Question de débutant, ridicule.

Je souhaite que chaque article ait des statistiques d'accès indépendantes, et que les informations sur les statistiques d'accès aient un champ séparé.

Une donnée d'accès comporte environ 450 caractères. Presque tous sont des chiffres anglais, seule l'adresse IP est en chinois.

La longueur du texte est de 65 535, ce qui équivaut à environ 145 lignes. Cela semble trop peu.
Si vous le changez en mediumtext, il semblera trop gros et ne sera pas utilisé, prenant de la place.

Y a-t-il une solution ?

某草草某草草2830 Il y a quelques jours701

répondre à tous(3)je répondrai

  • 怪我咯

    怪我咯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

    répondre
    0
  • ringa_lee

    ringa_lee2017-05-16 13:09:57

    mediumtexttext只多1 Byte,如果你觉得这就算太大,用不完,占用空间, alors je ne trouve pas de meilleur moyen

    répondre
    0
  • 大家讲道理

    大家讲道理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();

    répondre
    0
  • Annulerrépondre