jmueller17 / Aixada

Aixada helps self-managed consumption cooperatives to organize their flow of products, money, and information.
Other
33 stars 37 forks source link

MySQL erros after upgrade to 5.7 #224

Closed davidromani closed 6 years ago

davidromani commented 6 years ago

Hello again.

Después de clonar la BD en un servidor nuevo con MySQL a 5.7 han empezado algunos problemas. En este caso, al intentar acceder a la ruta /manage_mysettings.php aparece el error 1406 "Data too long for column 'products'"

Para mover la aplicación al nuevo servidor ejecuté un mysqldump para la estructura y los datos. Luego cargué el dump al nuevo MySQL (5.7). Y finalmente ejecuté el script SQL sql/setup/aixada_queries_all.sql.

captura de pantalla 2018-04-24 a les 19 42 19
davidromani commented 6 years ago

Otro error que aparece al finalizar un pedido és el siguiente:

captura de pantalla 2018-04-24 a les 20 04 41
jorix commented 6 years ago

... finalmente ejecuté el script SQL sql/setup/aixada_queries_all.sql.

¿En que versión estabais?

jorix commented 6 years ago

NOTA: Ya mencioné en #223 de usar aixada_queries_all.sql con cuidado, implica estar actualizado y no es fiable usarlo si no es de la master actual.
(en el tiempo ha habido momentos que el aixada_queries_all.sql no era correcto)

Si os urge intentad restaurar los procedimientos de vuestra base de datos antigua.

jorix commented 6 years ago

He investigado más sobre: imagen

Es cierto: Aixada no era muy estricto con las restricciones de SQL, y solo está garantizado que funcione bien si SQL_MODE = ''
Y esto indica que estais usando un código PHP bastante obsoleto. Desde 12-2-2015 (#116) Aixada en cada conexión a MySql se encarga de ejecutar:

$this->mysqli->query("SET SESSION SQL_MODE = '';");
jorix commented 6 years ago

NOTA2: No debeis usar la migracion tal como esta ahora en producción!!!, fallará por algun lado.
Los procedimientos de BD son nuevos y el PHP viejo = BOMBA.

davidromani commented 6 years ago

jorix muchas gracias por tu tiempo, entonces puede que lo mejor seria (aprovechando que nos cambiamos de servidor) actualizar el código fuente al último commit de la rama master.

Correcto?

jorix commented 6 years ago

Correcto?

Sí!
Hay mejoras que os pueden interesar: gestión del dinero, saldo de proveedores, más estable, rodar en hosting con restricciones de CPU-memoria, más personalizable...

Leed CHANGELOG-es.md para la v2.8

Atención si no tenéis la tabla aixada_price se debe hacer algo antes de ejecutar sql/dbUpgradeTo2.8.sql

davidromani commented 6 years ago

@jorix la tabla aixada_price ya existe, por lo tanto, estábamos en la versión +2.6.

Ya he actualizado el código fuente al último commit de la rama master. Parece que todo funciona mejor, pero el error 1406 (Data too long for column 'products') en la ruta /manage_mysettings.php persiste :-(

jorix commented 6 years ago

Pues esto de data too long puede ser un bug (lo que vi cuando lo revisé no erabonito) , lo pruebo cuando me pueda sentar delante el PC.

El ds., 28 abr. 2018 11.38, David Romaní notifications@github.com va escriure:

@jorix https://github.com/jorix la tabla aixada_price ya existe, por lo tanto, estábamos en la versión +2.6.

Ya he actualizado el código fuente al último commit de la rama master. Parece que todo funciona mejor, pero el error 1406 (Data too long for column 'products') en la ruta /manage_mysettings.php persiste :-(

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jmueller17/Aixada/issues/224#issuecomment-385159088, or mute the thread https://github.com/notifications/unsubscribe-auth/ABDGDkLgb8yYZ2jY_M_I0UQsBvwlHRLxks5ttDixgaJpZM4TiIBE .

jorix commented 6 years ago

Lo he probado, y no me falla.

Antes de continuar mira que no haya incoherencia con la codificación utf-8 en vuestro esquema MySql
(haz use vuestro_nombre_de_esquema)

La sentencia SQL show variables like "character_set_database"; debe contestar utf8

Y la show variables like "collation_database"; debe ser utf8_general_ci

No se...
Donde pensaba que podría fallar es en asignar el resultado de un group_concat() a una varchar(255), pero en mi MySql 5.7 lo trunca sin problema ni queja.

Prueba ejecutar en tu MySql

call get_member_info(2,0);

y mira que hay en la fila 27 de

  select distinct p.name
  from aixada_member m
  left join aixada_product p
  on m.uf_id = p.responsible_uf_id
  where m.id = 2;
davidromani commented 6 years ago

@jorix adjunto los resultados obtenidos después de ejectuar cada SQL que comentas:

mysql> show variables like "character_set_database";
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set (0.01 sec)

mysql> show variables like "collation_database";
+--------------------+-------------------+
| Variable_name      | Value             |
+--------------------+-------------------+
| collation_database | latin1_swedish_ci |
+--------------------+-------------------+
1 row in set (0.01 sec)

mysql> call get_member_info(2,0);
ERROR 1406 (22001): Data too long for column 'products' at row 27
mysql> select distinct p.name
    ->   from aixada_member m
    ->   left join aixada_product p
    ->   on m.uf_id = p.responsible_uf_id
    ->   where m.id = 2;
+-----------------------------+
| name                        |
+-----------------------------+
| COSITAS                     |
| oli garrafa 5L 2016 - stock |
| oli garrafa 5L 2016         |
| oli garrafa 5L 2016-comanda |
| oli garrafa 5L 2018         |
| Alubia negra                |
| Alubia Tolosa               |
| Suc de poma                 |
| Sidra                       |
| Nous                        |
| Kiwi                        |
| Poma reineta                |
| Patxaran                    |
| Licor café                  |
| Orujo de hierbas            |
| Alubia roja                 |
| Olivada empeltre 100gr      |
| Olivada arbequina 100gr     |
| Olivada amb all 100gr       |
| Olivada picant 100gr        |
| Olivada dolça 100gr         |
| Olivada amb cacao 100gr     |
| Oliva Arbequina 160 gr.     |
| Oliva Arbequina 400 gr      |
| oli garrafa 25L 2018        |
+-----------------------------+
25 rows in set (0.00 sec)

Parece que la codificación de caracteres no es correcta. Existe alguna sentencia SQL para arreglarlo?

jorix commented 6 years ago

Existe alguna sentencia SQL para arreglarlo?

@davidromani He encontrado stackoverflow/how-to-convert ... pero no lo he probado.

Una vez convertido debéis ejecutar otra vez aixada_queries_all.sql

Y luego comprobar que en la aplicación funcionen las palabras de paso de los usuarios y que se ven correctamente los acentos etc.


Ya es tarde.... en la Wiki de la instalación se indica que se debe ejecutar:

alter schema myaixada default collate utf8_general_ci;

A veces se ha pasado por alto en alguna instalación ;-) en la versión inglesa queda un poco oscuro, y en la de castellano lo puse yo en 2015, es posterior a vuestra Aixada inicial.