Un FLOAT es un decimal de punto flotante, pero a diferencia del desperdicio de espacio que tienes en el TEXT y el CHAR, sólo requiere 8 bytes para almacenar todo ese número.
Por otro lado, el problema de truncado puede perfectamente ser un tema de representación numérica de PHP y no de MySQL (que puede devolverte completo ese número, pero se debe indicar expresamente).
Además, te comento un detalle (experiencia trabajando con geolocalización): cualquier dígito decimal por detrás del sexto es completamente irrelevante, porque a partir de la esa posición decimal estás hablando de menos de 10 centímetros...
Explico mejor: Cada grado (entero) representa aproximadamente 112 Km. Luego, el primer decimal son 11,2 Km, el tercero 1,12, etc. De ese modo, al llegar al octavo estamos hablando de 0,00112 metros, lo que equivale a decir menos un centímetro...
¿Me puedes explicar para qué quieres ese nivel de precisión?
Ni siquiera lo puedes representar en un mapa.
Nota: No te olvides que Latitud y Longitud son devueltas por calculo matemático, por lo que es natural que sea un punto flotante, ya que el calculo es una triangulación sobre un geoide. Pero luego hay una gran cantidad de decimales que se desprecian por irrelevantes.
En cuanto al PHP, según el manual:
Cita: El tamaño de un flotante depende de la plataforma, aunque un valor común consiste en un máximo de ~1.8e308 con una precisión de aproximadamente 14 dígitos decimales (lo que es un valor de 64 bits en formato IEEE).
Hay algunos considerandos más al respecto, por ejemplo el impacto de las conversiones entre cadenas de texto (string) y números, por lo que te recomiendo que leas más detalladamente el manual:
http://ar.php.net/manual/es/language.types.float.php