MariaDB Illegal mix of collations és más kellemes dolgok... [megoldva]

Nem az a kérdés, hogy belefut-e az ember, hanem az, hogy mikor, és persze hogy hogyan mászik ki belőle, mert az insert/update/delete a webes alkalmazás felől/felé működik szépen, a táblák utf8, a table status azt mondja, hogy utf8_general_ci a collation, viszont:


update VALAMI_TABLA set VALAMI_OSZLOP = SAJAT_FV(VALAMI_OSZLOP, 456567);
ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,COERCIBLE)
 and (latin1_swedish_ci,IMPLICIT) for operation 'locate'

Hozzászólások

Mysql alatt az utf8 az nem az. :)
Utf8mb4 környékén keresgélnék.

Ez gyk. azt jelenti, hogy pl. az emoji-k a mysql féle utf8-ba nem menthetők (5.7) utf8mb4 kell neki.

Ha esetleg jdbc-t használsz, az trükkös, mert a connection stringben utf8 kell hogy legyen, de a db encodingja utf8mb4.

Jó debugolást.

Ezt olvastam... Az emojikat letojom, nem érdekelnek, Árvíztűrő tükörfúrógép menje be/ki rendesen, és egy redva függvény legyen képes bizonyos oszlopok tartalmát adott eljárás szerint "elkódolni", akkor is, ha ékezetes szöveg van benne.
Ha ez elkódolós függvényt átírom úgy, hogy a visszaadandó varchar()-ba nem kerülhet ékezetes betű, akkor jó...

-Base64-ben nincs ekezetes betu.
-Set names utf8 megvolt? (gondolom igen)
-Egy szal 0xC5 szerintem sem valid UTF-8 ertek. Utana meg kell egy byte, aminek a felso bitje 1.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Nem base64, hanem egyedi, "olvasható" szöveggé kell egyirányú módon átalakítani, a kapott stringnek ráadául néhány speciális paraméternek is meg kell felelnie (ékezetest ékezetesre, nagybetűt nagybetűre, kisbetűt kisbetűre, számot számra, stb.), tehát pl. a "Háromszög"-ból legyen "Nőveueqáz" - a "miért"-et ne tölem kérdezd... (Gyakorlatilag végigmegy a függvény az inputon, és több paraméter alapján "cserélgeti" a karaktereket, és rakja össze a a kimeneti értéket, és amikor a végére ér, akkor visszaadja, amit kapott.
Ha az ékezetest-ékezetesre szabályt kiveszem, akkro jól működik, úgyhogy valahol ott lehet az eb elhantolva (a régi DB-hez hasonlóan "Mminden" utf8-ra beállított állapotban, ahol collation probléma már nincs), hogy a függvényben a varchar változóhoz az ékezetes betű "hozzápakolása" valami miatt nem jó.

Megszokás... Anno a Mysql a hiányosságai ellenére is (vagy épp azért) jobb teljesítményt nyújtott adott hardveren, faék egyszerű (volt), úgyhogy kétféle ember kezdte használni: boldog, boldogtalan.
Azóta fordult párat a világ, viszont a felhasználói bázis, a rá épülő alkalmazások hada (jó, nagyrészüket lehet más DB-re is tenni, csak általában a MySQL/MariaDB az elsődlegesen támogatott) viszo előre ezt a csodát...