El paso a paso o código que hallarás en este post es la solución más rápida y válida que encontramos a tu duda o problema.
Solución:
El mensaje de error es bastante claro. La mesa krneki_2
no tiene una columna nombrada id_naslov
. A menos que haya alguna corrupción en las tablas del sistema o un error, no hay duda al respecto.
Así que tenemos que eliminar varias posibilidades de por qué aparece esto:
-
Hay desajustes entre los
CREATE TABLE
declaraciones y laUPDATE
:CREATE TABLE ` krneki_1` ... CREATE TABLE ` krneki_2` ... UPDATE krneki_1 AS U1, krneki_2 AS U2 ...
La falta de coincidencia es un espacio al comienzo de los nombres.
Esto debería haber dado un error de “La tabla ‘krneki_1’ no existe” así que supongo que tienes dos versiones de la tabla krneki_1
y la versión sin el espacio no tiene el id_naslov
columna.
Eliminamos esta posibilidad, fue un error de copiar y pegar del OP.
-
El nombre de la columna en el
CREATE TABLE
y elUPDATE
no son idénticos. Pueden tener el mismo aspecto, pero pueden tener caracteres no imprimibles o pueden tener caracteres Unicode que tienen el mismo aspecto pero son puntos de código diferentes. Para averiguarlo, podemos usar esta consulta:select table_catalog, table_schema, table_name, column_name, ordinal_position, char_length(column_name) as cl, length(column_name) as l, hex(column_name) as hex from information_schema.columns where table_name = 'krneki_2' ;
que revela la diferencia (columnas no necesarias eliminadas de la salida):
+------------+-------------+------------------+----+----+
| table_name | column_name | ordinal_position | cl | l |
+------------+-------------+------------------+----+----+
| krneki_2 | id | 1 | 2 | 2 |
| krneki_2 | id_naslov | 2 | 10 | 12 | -- !!! --
| krneki_2 | id_zaposlen | 3 | 11 | 11 |
+------------+-------------+------------------+----+----+
¡La nota 12 es más grande que la 10 y ahí está el problema! Significa que el nombre de la columna tiene 10 caracteres y usa 12 bytes. Estos números deberían ser 9 (si contamos id_naslov
correctamente y si los 9 caracteres fueran ASCII), por lo que algo sospechoso está pasando allí.
Puedes añadir hex(column_name)
en la lista de selección de esta última consulta y sabremos cuál es exactamente el nombre de la columna. Luego puede modificarlo para que solo tenga caracteres ascii imprimibles.
Para solucionarlo, necesitas algo como esto:
set @column := X'EFBBBF69645F6E61736C6F76' ;
set @qry:= concat('alter table krneki_2 change column ',
@column,
' id_naslov smallint') ;
prepare stmt from @qry ;
execute stmt ;
Te mostramos comentarios y calificaciones
Te invitamos a ayudar nuestra función fijando un comentario o dejando una valoración te damos la bienvenida.