Rumah  >  Soal Jawab  >  teks badan

php - text长度不够用,改为mediumtext感觉 又太大,有没什么方法?

新手问题,见笑了。

我想让每篇文章都有一个独立的访问统计,访问统计信息单独一个字段。

1条访问数据约为450个字符。几乎都是英文数字,只有ip地址是中文。

text长度是65535,相当约145条。感觉 太少了。
如果改为mediumtext感觉又太大,用不完,占用空间。

请教有没什么方法?

某草草某草草2686 hari yang lalu602

membalas semua(3)saya akan balas

  • 怪我咯

    怪我咯2017-05-16 13:09:57

    Untuk statistik akses, anda harus mereka bentuk jadual yang berasingan. Menetapkannya sebagai medan adalah menyusahkan untuk dikekalkan. Jom dapatkan jam tangan berasingan


    Jika anda ingin menyesuaikan medan dengan sewajarnya, bantuan adalah ID artikel

    balas
    0
  • ringa_lee

    ringa_lee2017-05-16 13:09:57

    mediumtexttext只多1 Byte,如果你觉得这就算太大,用不完,占用空间, maka saya tidak dapat mencari jalan yang lebih baik

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:09:57

    Pengarang terlebih dahulu perlu memahami bahawa teks dan teks panjang adalah jenis medan panjang berubah-ubah
    Ini ialah penerangan dalam phpMyAdmin:
    teks: Medan teks yang boleh menyimpan sehingga 65535 (2^16-1) bait dan disimpan. dalam Gunakan 2 bait sebelum kandungan untuk menunjukkan bilangan bait kandungan
    teks panjang: Maksimum 4294967295 bait, atau medan teks 4GB (2^32-1) boleh disimpan semasa menyimpan, gunakan 4 bait sebelum kandungan untuk menunjukkan bilangan bait kandungan
    Dalam erti kata lain, jika anda hanya menyimpan 1 aksara dalam medan teks panjang, ruang yang diduduki hanya 4 bait ditambah dengan bilangan bait yang diduduki oleh 1 aksara, bukannya menduduki 4 GB storan. ruang, 4 GB merujuk kepada nilai maksimum yang boleh disimpan oleh medan.

    Akhirnya, terdapat berbilang kuantiti yang jelas berkaitan dan perlu disoal dan dikira. Tidak disyorkan untuk memasukkan kesemuanya ke dalam satu medan Perkara seperti data sesi yang tidak pasti (seperti rentetan JSON) boleh disimpan dalam medan teks panjang. Contohnya, I Jadual perbualan:

    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();

    balas
    0
  • Batalbalas