Si te he entendido bien tu problema es que cuando tienes dos caracteres uno te lo comprará con espacios pero en la base de datos no tiene el espacio 
luego tu buscarías "GV " y realmente hay "GV" 
¿Qué tal si haces un trim al resultado de trim(substr($data[3],0,3))?  
http://php.net/manual/es/function.trim.php 
O bien tu problema es que al insertar no te pone el espacio en blanco 
con lo que te insertaría "GV01" en lugar de "GV 01" 
en ese caso puedes utilizar la función rpad en el insert 
http://dev.mysql.com/doc/refman/5.0/...#function_rpad, o si lo quieres solucionar con php hacer un str_len y si la longitud es dos concatenar un espacio en blanco 
http://php.net/manual/es/function.strlen.php 
O también puedes dejar el espacio en blanco en el campo cod_categoria de tu tabla categoria