嘿伙计们我正在尝试编写一个更新脚本,其中我需要为每一行设置休眠时间然后继续该过程
只要这个过程如此巨大且无法立即完成(将Latin-1 Charset切换为UTF-8),那么我需要在每行转换后进入休眠时间
这是一个通常的工作代码转换成utf-8但睡眠时间不起作用,它再次一次完成。
ob_implicit_flush();
$result = $db->sql_query("SHOW TABLES");
while ($row = $db->sql_fetchrow($result)) {
$db->sql_query("ALTER TABLE $row[0] COLLATE $collation");
$result1 = $db->sql_query("SHOW COLUMNS FROM $row[0]");
while ($row1 = $db->sql_fetchrow($result1)) {
if (preg_match('~char|text|enum|set~', $row1["Type"])) {
$db->sql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] CHARACTER SET binary");
$db->sql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] COLLATE $collation" . ($row1["Null"] ? "" : " NOT NULL") . ($row1["Default"] && $row1["Default"] != "NULL" ? " DEFAULT '$row1[Default]'" : ""));
}
echo"sleep for 2 seconds ....<br> $row[0] is already converted.";
// wait for 2 seconds
usleep(2000000);
// back!
echo date('h:i:s') . "\n";
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
您似乎在每个表之间“睡觉”而不是在每个列更新之间 - 这是您想要的方式吗?无论如何,如果数据大2秒可能是太低的时间
Windows PHP中还存在一个错误,您必须设置无限时间限制,否则睡眠将导致CPU使用率过高。
set_time_limit(0);
答案 2 :(得分:0)
与Simon不同,我可以看到在更新之间留下空白有一些优点,但为什么要在单独的操作中更新每一列?如果你一次更改它们会快得多。
答案 3 :(得分:-1)
我没有看到你睡觉的努力。那两秒钟你还在等什么?该剧本在睡觉时无法完成其他工作。