你是对的,这个问题是分号爆炸的结果。我们可以使用dbdelta_queries 过滤以修复它。
在这个解决方案中,我们假设所有查询都以CREATE、INSERT或UPDATE开头。如果您在dbDelta中运行查询,而实际情况并非如此,那么preg_match 线路需要调整,否则不能正常工作。
add_filter( \'dbdelta_queries\', \'my_dbDelta_queries\' );
function my_dbDelta_queries( $queries ) {
    $toJoin = array();
    $start  = array();
    $count  = 0;
        foreach( $queries as $i => $query ) :
                if ( !preg_match( "/CREATE|INSERT|UPDATE( [^ ]*)/", $query ) ) :
                        if( !empty( $start ) ) :
                            $toJoin[$count] = array( $start[key( $start )] );
                            unset( $queries[key( $start )] );
                        endif;
                    $toJoin[$count][] = $query;
                    unset( $queries[$i] );
                    $start = array();
                else :
                    $start = array( $i => $query );
                    $count++;
                endif;
        endforeach;
        if( !empty( $toJoin ) ) :
                foreach( $toJoin as $join ) :
                    $queries[] = implode( \';\', $join );
                endforeach;
        endif;
    return $queries;
}