Mysql Ver 8.0.41 zu MariaDB 10.11.11

am 09.04.2025 - 01:08 Uhr in
Wg. Providerausfall musste ich mir schnell einen neuen suchen. Klappte mit gewissem Lehrgeld ;-), jetzt eigentlich hoffnungsvoll, aber jetzt ein Problem:
Lokal habe ich Linux Mint LMDE6 mit MariaDB 10.11.11 und online läuft Mysql Ver 8.0.41 (beim neueren Provider).
Speichern im Terminal mit mysqldump oder drush geht, das zurücklesen auf der gleichen Plattform auch.
Aber die Übertragung von der Online-Seite, DB mit FTP geholt und lokal eingelesen scheitert an den Collationen.
Es müsste passende Konfigurationen oder Switches serverseitig und lokal geben. MariaDB (lokal) beschwert sich über eine Collation utf8mb4_0900_ai_ci, und ich habs noch nicht lösen können.
Hat schon mal jemand eine ähnliche Konstellation hinbekommen?
(Ich bin an anderen Installationen mit MariaDB auch online beteiligt, deshalb brächte es nichts mein lokales Linux zu ändern).
- Anmelden oder Registrieren um Kommentare zu schreiben
Ergänzt, MariaDB Output ..
am 09.04.2025 - 01:34 Uhr
. MariaDB (lokal) beschwert sich über eine Collation utf8mb4_0900_ai_ci,
$ mysql -hlocalhost -u..... < ... .sql
--------------
CREATE TABLE `node__field_titel` (
`bundle` varchar(128) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '' COMMENT 'The field instance bundle to which this row belongs, used when deleting a field instance',
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT 'A boolean indicating whether this data item has been deleted',
`entity_id` int unsigned NOT NULL COMMENT 'The entity id this data is attached to',
`revision_id` int unsigned NOT NULL COMMENT 'The entity revision id this data is attached to',
`langcode` varchar(32) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '' COMMENT 'The language code for this data item.',
`delta` int unsigned NOT NULL COMMENT 'The sequence number for this data item, used for multi-value fields',
`field_titel_value` varchar(140) NOT NULL,
`field_titel_format` varchar(255) DEFAULT NULL,
PRIMARY KEY (`entity_id`,`deleted`,`delta`,`langcode`),
KEY `bundle` (`bundle`),
KEY `revision_id` (`revision_id`),
KEY `field_titel_format` (`field_titel_format`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Data storage for node field field_titel.'
--------------
ERROR 1273 (HY000) at line 20603: Unknown collation: 'utf8mb4_0900_ai_ci'
Moin wie immer gilt Google
am 09.04.2025 - 09:24 Uhr
Moin wie immer gilt Google ist dein Freund und die Lösung ist so simpel, dass es erschreckend erscheint.
Schreib uns, ob's funktioniert hat . Bis denn. Entschuldige den holprigen Ton, der kommt vom übersetzen mit Ki. Mach ich später schick.
Was ist Kollationierung?
"Eine Sortierreihenfolge ist eine Reihe von Regeln, die festlegen, wie Zeichenketten verglichen und sortiert werden sollen. Jede Sortierung in Mariadb gehört zu einem einzelnen Zeichensatz. Jeder Zeichensatz hat mindestens eine Sortierung, und die meisten haben zwei oder mehr Sortierungen" in MySQL.
SQL-Server verwenden Kollationen, die die Zeichensätze zusammen mit ihren Sortierregeln und den Eigenschaften der Groß- und Kleinschreibung definieren. Jeder Teil der Kollation, getrennt durch einen Unterstrich _, definiert bestimmte Eigenschaften.
Nehmen Sie zum Beispiel die Sortierung 'utf8mb4_0900_ai_ci'. Hier bezieht sich der erste Teil (utf8mb4) auf einen 4-Byte UTF-8 Unicode Encoding Zeichensatz. Die Zahl 0900 bezieht sich auf die Version des Unicode Collation Algorithm. Und die letzten Teile definieren die Unempfindlichkeit gegenüber Akzent und Großschreibung.
Genug von der Theorie...! Kommen wir nun zu einer Lösung für den Fehler Unknown collation: 'utf8mb4_0900_ai_ci' in MySQL.
Die Lösung für den Fehler Unknown Collation utf8mb4_0900_ai_ci in Mariadb
Folgen Sie einfach diesen Schritten, um den Unknown Collation utf8mb4_0900_ai_ci Fehler in MySQL zu lösen:
Schritt 1: Öffnen Sie die Datei dump.sql in einem beliebigen Editor.
Schritt 2: Suchen Sie 'utf8mb4_0900_ai_ci' und ersetzen Sie es durch 'utf8mb4_unicode_ci'.
Schritt 3: Speichern Sie die Datei.
Bingo! Der Fehler wird behoben sein.
https://stackoverflow.com/questions/5906585/how-to-change-the-character-...
Hier ist noch ein Lösungsansatz:
https://github.com/ddev/ddev/issues/1902
Bei Systemen, die das
am 09.04.2025 - 12:47 Uhr
Bei Systemen, die das Programm sed kennen (etwa linus oder MacOS), geht das einfacher:
LC_ALL=C sed -i '' 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' [Name des Datei].sql
z.B. cat [Name des Datei].sql | vendor/bin/drush sqlc
Dieser Befehl muß im Verzeichnis ausgeführt werden, indem sich das vendor Verzeichnis befindet.
Collationenzeugs ..
am 13.04.2025 - 22:24 Uhr
Danke, beide, meine Frage war vielleicht nicht deutlich genug - die sql nachträglich zu editieren hab ich auch schon probiert, aber das finde ich böse wenn es sich um regelmäßige Transfers handelt, was hier unvermeidlich ist. Ich hoffte/und meinte davon gehört zu haben, auf eine stationäre Konfiguration, die das Problem lösen könnte.
Das habe ich in den Verweisen nicht gefunden, habe aber gerade nicht die Zeit es zu vertiefen. Ich wills aber wieder aufgreifen.
Ein sed-Skript wirklich nur als Notlösung, vielleicht. (erwähnte ich nicht, Linux hier?).
Wie Notlösung? Es wäre wohl
am 14.04.2025 - 00:43 Uhr
Wie Notlösung? Es wäre wohl einfacher auf einem der beiden Server den Datenbankserver auszutauschen. Dann gibt's dass Problem nur einmal während der Migration und somit ist es gelöst. In welchem Anwendungsfall der Welt gibt es bitte auf Dauer zwei unterschiedliche MySQL Server zwischen denen Daten ausgetauscht werden? Dass sollte es nirgends geben. Wenn es wirklich regelmäßig Transfers gibt, dann ist dass angleichen der beiden Server im Grunde die einzig valide Lösung. Sonst bleibt ja nur Export , Sed, Upload, import :-)
Es gibt eine generelle
am 14.04.2025 - 10:30 Uhr
Es gibt eine generelle Lösung: Alle Tabellen auf dem exportierenden System mit alter table auf die gewünschte Collation umstellen. Zusätzlich sollte auch die DB selbst umgestellt werden, damit bei der Anlage neuer Tabellen die Collation gleich richtig steht. Das sollte man aber per Script machen sonst ist es eine Plackerei.