Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [MySQL] Welche Kollation soll ich wählen? (https://www.delphipraxis.net/116889-%5Bmysql%5D-welche-kollation-soll-ich-waehlen.html)

TheMiller 8. Jul 2008 11:33


[MySQL] Welche Kollation soll ich wählen?
 
Tach!

Ich möchte mich gerade mal mit Kollationen befassen, weil ich sie bisher immer außer Acht gelassen habe. Ich selbst benutze immer "latin1_german1_ci", PHPMyAdmin legt aber automatisch immer "Utf8-general-ci" an.

Wäre nett, wenn ihr mich kurz ein bissl über Kollationen aufklären würdet und ein paar Worte zu diesen zwei speziellen Kollationen verlieren könntet!

Danke im Voraus!

DeddyH 8. Jul 2008 12:08

Re: [MySQL] Welche Kollation soll ich wählen?
 
Mit Kollationen wird die Sortierreihenfolge von String-Feldern anhand der Zeichenkodierung festgelegt. Näheres dazu siehe hier. Dabei steht das ci für case-insenstive, aber das hast Du Dir wahrscheinlich schon gedacht.

TheMiller 8. Jul 2008 12:23

Re: [MySQL] Welche Kollation soll ich wählen?
 
Hm... und welche Kollation ist jetzt besser / richtiger? utf8, latin1_de oder eine ganz andere?

Das mit dem ci habe ich gestern herausgefunden ;)

Florian H 8. Jul 2008 12:48

Re: [MySQL] Welche Kollation soll ich wählen?
 
Es gibt kein richtig oder falsch.. wäre eine der Möglichkeiten "falsch", wäre sie wohl gar nicht drin ;)
Es kommt eben auf die Anwendung an. Für eine Sortierung die auch deutsche Sonderzeichen (Umlaute, Scharf-S etc.) korrekt (also z.B. so wie im Telefonbuch) verwertet, brauchst du eine der latin1_de-Kollationen. Mehr dazu steht aber im MySQL-Handbuch :)

alcaeus 10. Jul 2008 08:10

Re: [MySQL] Welche Kollation soll ich wählen?
 
Und wenn du Wert darauf legst, dass deine Anwendung Unicode-faehig ist (was bspw. in PHP durchaus PITA sein kann) dann solltest du nen utf8-Zeichensatz verwenden, wie z.B. utf8_general_ci

Die Standardcollation kannst du z.B. in der my.ini festlegen, die Standardcollation fuer eine Datenbank oder eine Tabelle setzt du beim Erstellen der Datenbank oder Tabelle. Nichts destotrotz kannst du auch Zeichensaetze mischen:
SQL-Code:
CREATE TABLE `foobar` (
  `foo` VARCHAR(255) COLLATE latin1_german1_ci NOT NULL,
  `bar` VARCHAR(255) COLLATE utf8_general_ci NOT NULL
);
Greetz
alcaeus

TheMiller 10. Jul 2008 09:04

Re: [MySQL] Welche Kollation soll ich wählen?
 
Hm... das Mischen von Zeichensätzen brauche ich nicht. Ob ich Unicode brauche wird sich noch rausstellen - obwohl es ja durchaus nicht verkehrt ist, gleich utf-8 zu nehmen... man weis ja nie, was noch kommt.

Was bedeutet dieser Halbsatz, insb. "PITA" ?

Zitat:

Zitat von alcaeus
was bspw. in PHP durchaus PITA sein kann

Danke!

alcaeus 10. Jul 2008 09:56

Re: [MySQL] Welche Kollation soll ich wählen?
 
PITA = Pain in the Ass.

Bedeutet dass du nur Funktionen verwenden darfst, die auch mit Multibyte-Zeichensaetzen klarkommen. UTF-8 unterstuetzt Zeichen die bis zu 4 Byte lang sind. D.h., wenn du zwei Zeichen hast, von denen eins zwei Byte und eins drei Byte lang ist, wuerde dir strlen eiskalt 5 zurueckgeben.

Ein Weg das Problem zu umgehn ist die mbstring-Extension. Ob diese vorhanden ist kannst du mit
Code:
extension_loaded('mbstring')
pruefen. Anschliessend musst du das Encoding der Extension auf UTF-8 stellen:
Code:
mb_internal_encoding('UTF-8');
Danach kannst du die MB-Funktionen nutzen. Anstatt strlen verwendest du mb_strlen, anstatt substr mb_substr, usw.

Greetz
alcaeus

TheMiller 10. Jul 2008 10:00

Re: [MySQL] Welche Kollation soll ich wählen?
 
Welche Zeichen wären denn länger als 2 Byte? Reden wir hier von Sonderzeichen wie Pfeile, Häuser etc, oder von den Zeichen A-Za-z/0-9 in verschiedenen Sprachen (Deutsch, Türkisch, Arabisch)?

alcaeus 10. Jul 2008 10:41

Re: [MySQL] Welche Kollation soll ich wählen?
 
Das Eurozeichen oder deutsche Umlaute sind 2-Byte-Zeichen. Wir reden also nicht von abwaegigen Zeichen, sondern von durchaus weit verbreiteten ;)

Mehr Informationen findest du in der Wikipedia.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz