如何计算MySQL中已插入文章$body字段的大小(KB)
计算博客文章$body字段的大小(KB单位)
嘿,我来帮你搞定这个计算文章内容大小的需求!分两种场景给你解决方案,不管是插入前提前计算,还是插入后从数据库里查询都能轻松实现:
一、插入前直接在PHP中计算$body的大小
因为$body是你PHP代码里的变量,直接用strlen()函数就能获取它的字节数(这才是对应实际存储的大小,毕竟不同编码比如UTF-8下一个中文字符占3字节),然后除以1024转成KB就行:
// 计算$body的字节长度 $byteLength = strlen($body); // 转换为KB,保留2位小数更直观 $kbSize = round($byteLength / 1024, 2); // 输出结果示例 echo "当前文章内容大小:{$kbSize} KB";
二、插入后从MySQL数据库查询已存文章的大小
如果已经把文章插入数据库了,想用SQL直接查指定文章的$body字段大小,可以用MySQL的LENGTH()函数(注意别和CHAR_LENGTH()搞混,后者是字符数,不是字节数),再转成KB:
-- 替换[你的文章ID]为实际的post_id值 SELECT ROUND(LENGTH(body)/1024, 2) AS body_size_kb FROM tbl_post WHERE post_id = [你的文章ID];
进阶优化:插入时同步存储大小
如果以后经常需要查看文章大小,建议给tbl_post加一个专门的字段存储KB值,这样不用每次都计算:
- 先给表加字段:
ALTER TABLE tbl_post ADD COLUMN body_size_kb DECIMAL(10,2) DEFAULT 0 COMMENT '文章内容大小(KB)';
- 插入时把计算好的大小一起存进去:
$byteLength = strlen($body); $kbSize = round($byteLength / 1024, 2); // 这里强烈建议用预处理语句,避免SQL注入(你的原语句直接拼接变量有安全风险) $stmt = $conn->prepare("INSERT INTO tbl_post(cat,titile,body,author,tags,body_size_kb) VALUES(?,?,?,?,?,?)"); $stmt->bind_param("sssssd", $cat, $titile, $body, $author, $tags, $kbSize); $stmt->execute();
注意事项
- 编码影响:如果你的数据库和PHP用的是UTF-8编码,
strlen()和LENGTH()返回的字节数是准确的,对应实际存储的文件大小; - 安全提示:一定要替换掉你原代码里直接拼接变量的写法,用预处理语句(PDO或mysqli都可以),不然很容易被SQL注入攻击。
内容的提问来源于stack exchange,提问作者Akjon Bertho Manus
相关产品推荐
相关产品推荐

