dant:
Según mi opinión personal, lo que estás tratando de hacer es un poco ineficiente. Mira yo lo haría de la siguiente forma:
1.- Crear mi base de datos con el siguiente juego de caracteres: ISO8859_1 (que es el juego de caracteres para la mayoría de los idiomas occidentales, incluyendo el Español, por supuesto).
2.-Crear los campos de Nombre, Apellido Paterno y Apellido Materno con el juego de caracteres mencionado arriba y utilizar el siguiente collate: ES_ES_CI_AI (Español de España, Caracter Insensitive, Accent Insentive), es decir tus campos no van a ser sensibles a mayúsculas ni minúsculas ni a los acentos. Por ejemplo, el siguiente nombre: Gerardo Suárez Trejo, sería exactamente igual a GERARDO Suarez Trejo (me explico, no importan las mayúsculas ni los acentos).
3.- Crear un campo computado con la concatenación de Apellido Paterno + Apellido Materno + Nombre (puedes calcular este campo con las valores antes capturados y es mucho mas cómodo para los usuarios).
4.- Creas un índice con el campo calculado (tu búsquedas sería de lo mas rápido que puedas imaginar, incluso puedes hacer búsquedas parciales, por ejemplo nombre_cmplto = 's', o nombre_cmplto = 'sua', etc. (la búsqueda automáticamente utilizaría el índice antes mencionados lo cual nos traería muchos beneficios en cuanto a velocidad se refiere).
5.-Creas un disparador (trigger before insert or update), y aquí haces una búsqueda para saber si existe el nombre_cmplto antes de hacer la inserción en la BD)
anexo un pequeño ejemplo que hice para una Escuela.
Código SQL
[-]
CREATE OR ALTER trigger alumnos_biu0 for alumnos
active before insert or update position 0
AS
BEGIN
IF(NEW.ID IS NULL) THEN
NEW.ID = GEN_UUID();
NEW.NOMBRE = TRIM(NEW.NOMBRE);
NEW.A_PATERNO = COALESCE(TRIM(NEW.A_PATERNO), '');
NEW.A_MATERNO = COALESCE(TRIM(NEW.A_MATERNO), '');
IF (EXISTS(
SELECT 1
FROM ALUMNOS
WHERE NEW.ID <> ID AND NEW.NOMBRE_CMPLTO = NOMBRE_CMPLTO)) THEN
EXCEPTION ALUMNO_REPETIDO;
END
Saludos,
Gerardo Suárez Trejo
PD. No dejes de platicarnos como te fue...