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