[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.)

Basszus, utánaolvastam EBCDIC-nek. Nagyon kegyetlen. Szerencsére nem ilyennel van dolgom.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

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;

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

Igen, az rendben van. Nem is tudom módosítani, mert külső db, nincs csak hozzáférési jogom.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

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.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick