• Hallo,


    ich bin Geocacher und möchte auch Caches speichern. Das Funktioniert mit SQLite ohne Probleme.

    Wenn ich einen Pocketquery auf meiner Synology Discstation unter MariaDB speichern möchte erscheint folgender Fehler:


    Code
    1. 2020-01-15 17:58:32.332 [warning] Execution of SQL-Statement ` "INSERT INTO items (type, keyqms, icon, name, date, comment, data, hash) VALUES (:type, :keyqms, :icon, :name, :date, :comment, :data, :hash)" ` failed:
    2. 2020-01-15 17:58:32.332 [warning] QSqlError("1366", "QMYSQL3: Der Befehl konnte nicht ausgeführt werden", "Incorrect string value: '\\xF0\\x9F\\x97\\x9D\\xEF\\xB8...' for column `caching`.`items`.`comment` at row 1")

    Ich habe auch die Fehlermeldung angehängt.


    Ich benutze (Archlinux):

    MariaDB 10.21.3

    QMapShack 1.14.0

  • Wie hast du denn auf die neue Datenbank umgestellt? Hast die Tabellen alle neu angelegt?

    Ich habe nichts umgestellt. Die Datenbanken wurden neu angelegt. Ich habe einmal die .gpx in SQLite gespeichert und einmal in MySQL.


    Ich habe den Fehler mal weiter eingekreist.

    Code
    1. Es stolpert über diesen Eintrag:
    2. <b>GC63XZW</b><br/>
    3. 🗝️ HomeZone 🗝️ (Micro, D 4.0, T 2.0)</div>

    Es geht bestimmt um das encodieren der Schlüsselsymbole.

  • Ich hab das mit MySql schon lange nicht mehr ausprobiert. Ich könnte mir jetzt zwei Gründe vorstellen.


    1. MariaDB Version zu alt. Da gab es eine Grenze. Ich weiß nur nicht mehr bei welcher Version

    2. In dem Cache sind tatsächlich seltsame Steuerzeichen. Vielleicht auch irgendein UTF-8 Problem bei der Datenbank.


    Edit:

    Ok, sehe gerade Du warst schneller. Schau mal ob dein Setup UTF-8 unterstützt.

  • Okay weitere Nachforschungen :)


    Bei Stackoverflow wir empfohlen die Table mit dem Charset 'utf8mb4' anzulegen.

    QMapShack benutzt 'utf8'.

    Ich habe mal ein testtable mit 'utf8mb4' angelegt:

    Wenn ich nun ein 'INSERT' in die QMapShack Tabelle items starte:

    Code
    1. MariaDB [caching]> insert into items(comment) values('🗝️');
    2. ERROR 1366 (22007): Incorrect string value: '\xF0\x9F\x97\x9D\xEF\xB8...' for column `caching`.`items`.`comment` at row 1

    Wenn ich nun ein 'INSERT' in testtable starte:

    Code
    1. MariaDB [caching]> insert into testtable(comment) values('🗝️');
    2. Query OK, 1 row affected (0.04 sec)
  • Kannst Du mal die Eigenschaften der Tabellen vergleichen?


    Ein ...

    SHOW CREATE TABLE 'testtable';

    SHOW CREATE TABLE 'items';

    ... müsste u.U. hier unterschiedliche Ausgaben haben?

    Gruß Andi :)
    - ZÛMO 595 - FW üblicherweise aktuell - SDHC 64GB - CN NTU LifeTimeAbo
    - DriveSmart 61 - FW üblicherweise aktuell - CN NTU LifeTimeAbo

    - Montana 680t - FW üblicherweise aktuell - SDHC 64GB - OSM-Karten
    - OREGON 450 - FW üblicherweise aktuell - SDHC 8GB - OSM-Karten

    - Zumo 550 - FW üblicherweise aktuell - SDHC 8GB - CN NT LifeTimeAbo

  • Wie man in Post #5 im ersten Codeblock sehen kann ist der Unterschied der Charset.


    Code
    1. MariaDB [caching]> SHOW CREATE TABLE testtable;
    2. +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------+
    3. | Table | Create Table |
    4. +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------+
    5. | testtable | CREATE TABLE `testtable` (
    6. `comment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
    7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
    8. +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------+
    9. 1 row in set (0.00 sec)



    Ich habe diesen Thread nur als Hinweis gestartet.


    Für mich hab ich es so gelöst das ich items.comment auf utf8mb4 eingestellt habe. ;)

  • Genau das mit dem Charset war mein Hintergedanke.

    Dieses Schlüsselchen ist halt in dem einen Charset enthalten und in dem anderen eben nicht.

    Also alles gut und alles richtig gemacht, soweit ich das als DB-Admin aus der Ferne sehen kann :wub:

    Gruß Andi :)
    - ZÛMO 595 - FW üblicherweise aktuell - SDHC 64GB - CN NTU LifeTimeAbo
    - DriveSmart 61 - FW üblicherweise aktuell - CN NTU LifeTimeAbo

    - Montana 680t - FW üblicherweise aktuell - SDHC 64GB - OSM-Karten
    - OREGON 450 - FW üblicherweise aktuell - SDHC 8GB - OSM-Karten

    - Zumo 550 - FW üblicherweise aktuell - SDHC 8GB - CN NT LifeTimeAbo

  • Wäre schön wenn es dazu ein Patch gibt.


    * Ticket erstellen: https://github.com/Maproom/qmapshack/issues

    * Bitte Templates benutzen https://github.com/Maproom/qmapshack/wiki/DocFaqProjectSite

    * Diese Anleitung lesen https://github.com/Maproom/qma…/wiki/DeveloperCommitCode

    * in `src/qmapshack/gis/db/IDBMysql.cpp` ist der Code um die Datenbank zu erstellen bzw zu migrieren.


    Danke!

  • In 'src/qmapshack/gis/db/IDBMysql.cpp' wird keine Datenbank erstellt nur die Tabellen.


    Laut der Anleitung im Wiki muss der MySQL Admin die Datenbank selbst erstellen.

    Es braucht nur eine Erwähnung in diese Seite eingefügt werden.


    Übrigens ist hier ein lesenswerter Artikel zu UTF8 vs UTF8MB4.