Closed jorix closed 2 years ago
Bones!
Aquest error també apareix en instalacions que ja estaven funcionant. Tot i modificar el que es proposa l'error continua apareixent al seleccionar un proveidor per fer una nova comanda:
An error "CALL get_products_detail('10','0',",'2019-03-27','0','0') generated error 1406: Data too long...
Alguna idea? Aquests canvis tal com estan fets a la proposta 3973343 no poden generar problemes d'incompatibilitat entre formats en data i varchar?
A @mamuts i a @jmueller17
Aquest error me l'ha reportat la coope Lagranera per email, hi estem treballant però no puc reproduir-lo ni usant MariaDB 10.3.12 (d'aquí ve que preparés el #252)
An error "CALL get_products_detail('10','0',",'2019-03-27','0','0') generated error 1406: Data too long...
Ho miraré...
El 397334361240e8bb496fa0495d559b3b05f56c3d és només una primera proposta per i determinar si pot ser una via de solució.
De tota manera això no hauria de passar ja que les sessions les obra el php/inc/database.php
forçant SQL_MODE=''
M'agradaria veure amb quin SQL_MODE i altres variables de sesión actuen en els vostres casos. He penjat un el commit 68e3c327abb9459aa49bae1999a941178463771f que informa d'això des de install.php
. Instal·leu-lo i pengeu el resultats del nou botó Get Session sql information.
Hola,
Perdoneu que fes el report del bug per mail, no queda la informació per tothom. Continuo per aquí.
Com sabeu La Granera tenim la instal·lació de Aixada a 000 webhost, i estava funcionant però crec que ha sigut degut a una actualització de MariaDB aquest gener que va començar a donar els errors de Data too long, en demanar product details.
397334361240e8bb496fa0495d559b3b05f56c3d solucionava parcialment el problema, però encara aparexien errors i vam intentar reproduir les condicions de MySQL via unset del flag SQL_Mode.
Si deixem php/inc/database.php
com està a master, tot i que s'està forçant
$this->mysqli->query("SET SESSION SQL_MODE = '';");
get session sql information retorna això
Update Aixada
Session sql information:
version = '10.3.13-MariaDB'
version_comment = 'MariaDB Server'
SQL_MODE = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
group_concat_max_len = 1048576
character_set_client = 'utf8'
character_set_results = 'utf8'
collation_connection = 'utf8_general_ci'
current_timestamp = '2019-03-27 09:19:48'
time_zone = 'SYSTEM'
PHP-datetime = '2019-03-27 09:19:48'
schema = 'id6328103_myaixada'
Investigant a https://mariadb.com/kb/en/library/sql-mode/ veig que una forma de desactivar una variable a MariaDB seria aquesta:
$this->mysqli->query("SET @@SQL_MODE = REPLACE(@@SQL_MODE, 'STRICT_TRANS_TABLES', '');");
Desapareix l'error de data too long, però després d'uns dies amb aixada operativa per fer comandes, misteriosament apareix el error que adjunto en la captura de pantalla i que ens impedeix fer comandes. En instal·lació local no hem sigut capaços de reproduir ni jo (amb MySQL) ni @jorix (amb MariaDB 3.10.12). Pot ser que MariaDB 3.10.13 sigui el responsable?
BTW, com a pla de contingència hem decidit moure el hosting a Pangea, per poder continuar amb la operativa.
Nosotros funcionamos con pangea y de momento sin problemas. Ojo también con 000 webhost No sé desde cuando lo tenéis alojado allí, pero hubo un data breach importante hace tiempo...
@dmanubens (@mamuts , si pots prova-ho també)
Contesto ràpit que avui tinc poc temps...
Queda clar que no actuen les sentencies que alteren el SQL_MODE.
El problema és que:
Session sql information:
SQL_MODE = 'STRICT_TRANS_TABLES,...'
group_concat_max_len = 1048576
hauria de ser:
Session sql information:
SQL_MODE = ''
group_concat_max_len = 255
Camvia les linies 67-68 per aquestes:
$this->mysqli->query("SET @@SQL_MODE = '';");
$this->mysqli->query("SET @@group_concat_max_len = 255;");
I torna a enviar el resultat del botó "Get Session sql information"
NOTA: Aquest canvi funciona be amb MySql i MariaDB 10.3.12.
Demà a la tarda faré proves amb MariaDB 10.3.13
@jorix al servidor de 000webhost (MariaDB 10.3.13), el canvi que proposes a les linies 67-68
$this->mysqli->query("SET @@SQL_MODE = '';");
$this->mysqli->query("SET @@group_concat_max_len = 255;");
no fa efecte per SQL_MODE
, pero si per a group_concat_max_len
Update Aixada
Session sql information:
version = '10.3.13-MariaDB'
version_comment = 'MariaDB Server'
SQL_MODE = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
group_concat_max_len = 255
character_set_client = 'utf8'
character_set_results = 'utf8'
collation_connection = 'utf8_general_ci'
current_timestamp = '2019-03-27 18:53:08'
time_zone = 'SYSTEM'
PHP-datetime = '2019-03-27 18:53:08'
schema = 'id6328103_myaixada'
He descobert una petita subtilitat, passant un espai blanc ' '
enlloc de doble coma ''
funciona:
$this->mysqli->query("SET @@SQL_MODE = ' ';");
Update Aixada
Session sql information:
version = '10.3.13-MariaDB'
version_comment = 'MariaDB Server'
SQL_MODE = ''
group_concat_max_len = 255
character_set_client = 'utf8'
character_set_results = 'utf8'
collation_connection = 'utf8_general_ci'
current_timestamp = '2019-03-27 19:21:44'
time_zone = 'SYSTEM'
PHP-datetime = '2019-03-27 19:21:44'
schema = 'id6328103_myaixada'
I... tant misteriosament com havia aparegut, ja NO surt l'error de l'avis de "producte modificat" que he adjuntat en l'screenshot abans i ens impedia fer comandes aquesta setmana...
No acabo d'entendre de si és independent de SQL_MODE=''
o no, perquè:
1) amb MySQL i SQL_MODE=''
al servidor de debug local i les mateixes dades l'error no es reproduía.
2) amb MariaDB 3.10.13, avui, amb SQL_MODE = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
, soc incapaç de reproduïr l'error ...
Intueixo que tindria a veure amb algun producte actiu per a aquesta setmana fins dimarts 26, pero que NOMÉS feia saltar l'error a MariaDB 3.10.13 amb qualsevol valor a SQL_MODE
@dmanubens
He descobert una petita subtilitat, passant un espai blanc ' ' enlloc de doble coma '' funciona
Desconcertant, però efectiu! GENIAL!
(caram amb la versió 10.3.13!!!, suposo interpreta que ''
vol dir sense valor i agafa el SQL_MODE del sistema)
No acabo d'entendre de si és independent de SQL_MODE='' o no...
Sí sí, és per això! Aixada requereix treballar amb SQL_MODE=''
En resum, i a falta de proves en altres intal·lacions descartaria la via 397334361240e8bb496fa0495d559b3b05f56c3d i opto per posar:
$this->mysqli->query("SET @@SQL_MODE = ' ';"); // At least one blank space is required!
// otherwise, it does not act in MariaDB 10.3.13
$this->mysqli->query("SET @@group_concat_max_len = 255;");
Si us plau qui pugui que provi amb MariaDB 10.3.13, el aa19ec7e9e3feeae0d5c06d0572d95845ba56767 i que informi del resultar del botó Get Session sql information de install.php
proposar en el 68e3c327abb9459aa49bae1999a941178463771f
@mamuts : Només cal canviar les línies 67-68 per aquestes:
$this->mysqli->query("SET @@SQL_MODE = ' ';");
$this->mysqli->query("SET @@group_concat_max_len = 255;");
i usar el nou botó de install.php
que ja t'he comentat com activar per correu.
NOTA:
Ara he provat que Aixada segueix funcionant correctament amb SET @@SQL_MODE = ' ';
usant tant MySql com MariaDB 10.3.12.
Deixò per demà a la tarda les proves amb 10.3.13.
@jorix
No acabo d'entendre de si és independent de SQL_MODE='' o no...
Sí sí, és per això! Aixada requereix treballar amb
SQL_MODE=''
En resum, i a falta de proves en altres intal·lacions descartaria la via 3973343
Entesos, doncs la veritat és que jo tenia aquest commit [ 397334] desplegat alhora que havia trobat la manera de fer l'unset de 'SQL_MODE'. Deu ser això que l'anterior proposta generava problemes i d'aquí l'error de 'producte modificat'... Reverteixo 397334 i deixo amb SQL_MODE=' '
@jmueller17:
En las pruebas con el MariaDB que ayer me descargué
version = '10.3.13-MariaDB'
version_comment = 'mariadb.org binary distribution'
no he podido reproducir el error de @dmanubens & @mamuts
Doy por buena la solución:
$this->mysqli->query("SET @@SQL_MODE = ' ';");
$this->mysqli->query("SET @@group_concat_max_len = 255;");
que sí he comprobado que no causa mal funcionamiento ni con MySql ni con MariaDB.
Por esto propongo el PR #257 junto con el #256 (este segundo nos ha ayudado a ver las variables de la sesión.
Espero que con esto se acaben las pesadillas con MariaDB ;-)
Gràcies per la col·laboració @dmanubens!
En algunas instalaciones al consultar productos de un proveedor se produce el error:
"Incorrect date value: '0' for column 'the_date'".
Por ejemplo, en MariaDB 10.3.12, la siguiente sentencia falla con el error mencionado:
Por lo tanto, incluso si se fuerza
SQL_MODE=''
enphp/inc/database.php
, la ejecución falla.Ver propuesta: 397334361240e8bb496fa0495d559b3b05f56c3d