¿Qué está causando el error # 1416 de MySQL? Cannot get geometry object from data you send to the GEOMETRY field

¿Qué está causando el error # 1416 de MySQL? Cannot get geometry object from data you send to the GEOMETRY field

Comencé a explorar nuevos tipos de datos en MySQL que nunca había usado en un proyecto real. Parece bastante conveniente almacenar las coordenadas de una ubicación en una columna de tipo Point de una tabla en la base de datos, ya que MySQL admite tipos de datos espaciales. Después de hacer algo tan simple como insertar una nueva fila usando el formulario de inserción PHPMyAdmin (quería probar cómo se ve), donde es posible insertar los puntos de la columna Tipo de punto con un formulario que se ve así:

Point DataType MySQL

Luego de llenar el formulario e intentar insertar el registro, aparece este error con la siguiente consulta generada:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', '\'POINT(40.71727401 -74.00898606)\',0')

Esta consulta arrojará el error mencionado: #1416 - Cannot get geometry object from data you send to the GEOMETRY field. This happens because the query is invalid. Para evitar que aparezca esta excepción, debe corregir su consulta para que coincida con la versión actual de MySQL o MariaDB.

Corregir la sintaxis de la consulta

Los datos en columnas espaciales deben almacenarse como datos espaciales. Los valores deben almacenarse en formato de geometría interna, pero puede convertirlos a ese formato desde el formato de texto bien conocido (WKT) o bien conocido binario (WKB).

En versiones más recientes de MySQL, insertar la consulta con Point funcionará:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', POINT(40.71727401 -74.00898606))

Como la función Point (X, Y) es básicamente un constructor de números con precisión y no requiere convertir primero a texto, lo que lo hace mucho más rápido. También está garantizado DEVOLVER UN PUNTO O FALLAR.

Sin embargo, para las versiones anteriores de MySQL y MariaDB, se verá obligado a utilizar los constructores de texto conocidos (WKT), que son más lentos. En versiones anteriores, estas funciones se pueden encontrar sin el prefijo, por lo que siempre que esté disponible, asegúrese de usar la versión con el prefijo. ST_  ST_ 

El siguiente ejemplo demuestra cómo insertar los mismos valores de geometría de datos en una tabla convirtiendo los valores de WKT a su formato de geometría interna (si ST_GeomFromText no está disponible, utilíce GeomFromText en su lugar):

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', ST_GeomFromText('POINT(40.71727401 -74.00898606)', 0));

Incluso si no usas el SRID (ID del sistema de referencia espacial), también puedes insertar el punto sin este valor:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', ST_GeomFromText('POINT(40.71727401 -74.00898606)'))

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable