Contar caracteres no es buena idea porque se te pueden quedar palabras cortadas entre página y página.
También puedes hacer un wordwrap() pero la idea es tampoco cortar párrafos.
Por eso te doy dos opciones que son más razonables y te dan más control:
En ambas tú vas a definir el lugar donde se cortan las páginas.
La primera:
En tu BD tienes una tabla "articulo" que tiene los aspectos comunes a todas las páginas del mismo artículo: (id, titulo, autor, fecha, etc). Pero no el texto.
En otra tabla "pagina" pones el contenido de cada página:(id_articulo, pagina, texto)
De esa manera puedes acceder directamente a una página determinada de un artículo detereminado.
------------------------------------------------------------
La segunda:(sólo referencial... mejor utiliza la primera)
Incluye una marca en el lugar en el que termina una página. Por ejemplo:
Código PHP:
// Supongamos que $texto es lo que está guardado en tu BD.
// Debería guardarlo algo así:
$texto = "bla, bla, bla, bla
bla, bla, bla.
<!-- cortar aqui >
bla, bla, bla
bla, bla, bla
<!-- cortar aqui >
bla, bla.";
De esa manera puedes hacer un:
$array_paginas = explode('<!-- cortar aqui >', $texto);
// Y ya tendrás en ese array una página en cada posición
// Puedes generar enlaces como en cualquier paginación para ese array.
Saludos