php - Panjang teks tidak mencukupi Menukarnya kepada teks sederhana terasa terlalu besar.
某草草
某草草 2017-05-16 13:07:57
0
3
655

Soalan newbie, tidak masuk akal.

Saya mahu setiap artikel mempunyai statistik akses bebas dan maklumat statistik akses mempunyai medan yang berasingan.

Satu bahagian data akses ialah lebih kurang 450 aksara. Hampir semuanya adalah nombor Inggeris, hanya alamat IP dalam bahasa Cina.

Panjang teks ialah 65535, yang bersamaan dengan kira-kira 145 baris. Rasanya terlalu sedikit.
Jika anda menukarnya kepada teks sederhana, ia akan terasa terlalu besar dan tidak akan digunakan, mengambil ruang.

Adakah terdapat sebarang penyelesaian?

某草草
某草草

membalas semua(3)
刘奇

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

左手右手慢动作

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

大家讲道理

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();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan