[Megoldva] Charset konverzió

Két LXD konténerben telepítettem ugyanazt az alkalmazást. Egyik maradb, másik mysql.

Mariadb a helyes karakterkódolással importál a táblákba:

MariaDB [(none)]> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

A mysql, nem 4 biten tárolja az ékezetes karaktereket, hibás az import.

mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.10 sec)

A táblák üresek, nincs bennük adat, ha valami elszáll nem gond. Sokat olvasgattam, de nem találtam meg, hogyan lehetne az értékeket mindenhol utf8mb4-re állítani. Sajnos sql-ben nem vagyok járatos...

Hozzászólások

Ha nem akarsz emojit, kanjit vagy rovásírást, akkor az utf8 is jó neked (1-3 bájt/karakter). Viszont a latin1 nagyon nem jó.

És hogy mi ennek az oka? Az, hogy ha valami nincs explicit megadva, akkor ott valamiféle alapértelmezés érvényesül. (Ami akár Siemens EBCDIC is lehet, ha a sors nincs veled.)

Amiből importálsz, abban be van állítva karakterkódolás? Például:

 

CREATE TABLE `tarca` (
  `az` int(11) NOT NULL,
  `penz` double NOT NULL,
  `leiras` varchar(100) COLLATE utf8mb4_hungarian_ci NOT NULL,
  `datum` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_hungarian_ci;

                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Szerkesztve: 2020. 05. 30., szo - 12:59

Sajnos a hiba nem az adatbázisban van. Ugyanaz az alkalmazás másként viselkedik x64 és arm architektúrán. Az alkalmazás fejlesztőinek kell jeleznem a problémát...

A témát így lezárom, mert innen offtopic lenne a dolog.

Ha valakit érdekel leírom ide is.