// 临时诊断: 检查 News 表 content/summary 的换行与长度情况 (用完即删) require('dotenv').config() const mysql = require('mysql2/promise') function parseUrl(url) { const u = new URL(url) return { host: u.hostname, port: Number(u.port) || 3306, user: decodeURIComponent(u.username), password: decodeURIComponent(u.password), database: u.pathname.replace(/^\//, '') } } async function main() { const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) const [rows] = await conn.execute( 'SELECT id, title, summary, content, CHAR_LENGTH(content) AS clen, CHAR_LENGTH(summary) AS slen FROM `News` ORDER BY id DESC LIMIT 10' ) console.log('总条数检查:') const [[cnt]] = await conn.execute('SELECT COUNT(*) AS c, SUM(content IS NULL) AS nullContent FROM `News`') console.log(JSON.stringify(cnt)) for (const r of rows) { const content = r.content || '' const summary = r.summary || '' const lf = (content.match(/\n/g) || []).length const cr = (content.match(/\r/g) || []).length const sLf = (summary.match(/\n/g) || []).length console.log('---') console.log('id=' + r.id + ' clen=' + r.clen + ' slen=' + r.slen + ' contentLF=' + lf + ' contentCR=' + cr + ' summaryLF=' + sLf) console.log('title: ' + r.title) console.log('summary: ' + JSON.stringify(summary.slice(0, 120))) console.log('content(hex首200): ' + content.slice(0, 200).replace(/[^\x20-\x7E\u4e00-\u9fa5]/g, (c) => '\\x' + c.charCodeAt(0).toString(16))) console.log('content(带转义首300): ' + JSON.stringify(content.slice(0, 300))) } await conn.end() } main().catch((e) => { console.error(e); process.exit(1) })