Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySQL und Collations (https://www.delphipraxis.net/77292-mysql-und-collations.html)

faux 17. Sep 2006 07:28

Datenbank: MySQL • Version: 4.1.15 • Zugriff über: PHP

MySQL und Collations
 
Hallo!

Ich habe bis jetzt immer MySQL 4.0.21 auf meinem Webserver laufen. Durch einen Serverwechselt wechselte ich auch die Version auf 4.1.15. Jedenfalls gibts da jetzt so eine Option, dass man die "Collation" für jede Datenbank, für jede Tabelle und sogar jedes Textfeld (CHAR, VARCHAR, TEXT, BLOB) setzen muss. Ich weiß nichtmal genau was das ist (Zeichensatz?), aber jedenfalls war alles standardmäßig auf latin1_swedish_ci gestellt. Ich dachte mir, dass das unnötig sei, einen Schwedischen Zeichensatz zu benutzen und stellte alles auf utf5_general_ci bzw utf5_bin. Eigentlich funktioniert das auch ganz gut, aber bei einer UNION Abfrage gibts Probleme:
Code:
Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (utf8_unicode_ci,IMPLICIT) for operation 'UNION'
Ich denke mal, dass die Connecion, die auch das Query ausführt, auf latin1_swedish_ci läuft, ich aber ALLE (wirklich alle, hab ich überprüft) Datenbanken, Tabellen und Felder auf utf8_unicode_ci stellte.
Wie kann ich das lösen?
Wo genau liegt der Unterschied zwischen latin1, utf8, ascii etc.? Welche Auswirkungen hat das?

Grüße
Faux

marabu 17. Sep 2006 08:11

Re: MySQL und Collations
 
Guten Morgen.

Zitat:

Zitat von faux
Wo genau liegt der Unterschied zwischen latin1, utf8, ascii etc.?

Vereinfacht ausgedrückt: Ein character set ordnet jedem Bild eines Buchstaben (glyph) einen Code zu. Eine Collation ordnet jedem Code eine Ordnungszahl zu, wodurch eine sinnvolle Sortierung erst möglich wird. US-ASCII ist der fast allen single-byte character sets zugrunde liegende 7 bit subset (code 0 bis 127). UTF8 ist ein multi-byte character set, der double-byte Unicode (UTF16) über einen byte-stream codiert, so dass man single-byte code libraries verwenden kann. LATIN1 ermöglicht in der SBCS-Welt eine Lokalisierung, die auch unter verschiedenen Betriebsystemen reibungslos funktioniert.

Die Macher von MySQL liefern ihr DBMS mit einer Grundeinstellung aus:

Im Handbuch zu Version 4.0.5 steht

4.6 MySQL Localisation and International Usage
4.6.1 The Character Set Used for Data and Sorting

By default, MySQL uses the ISO-8859-1 (Latin1) character set with sorting according to Swedish/Finnish. This is the character set suitable in the USA and western Europe.

Schau doch mal in das entsprechende Kapitel des Handbuchs. Dort stehen eine ganze Reihe hilfreiche Angaben zur Vorgehensweise, wenn du deine Installation auf German umstellen möchtest.

Grüße vom marabu

faux 17. Sep 2006 09:53

Re: MySQL und Collations
 
Gibts ne Möglichkeit alle Textfelder in der ganzen DB auf eine andere Collation zu setzen?

Grüße
Faux

marabu 17. Sep 2006 14:19

Re: MySQL und Collations
 
Sicher - im schlimmsten Fall über ein Schleifenkonstrukt. Schau mal was die Befehle ALTER SCHEMA bzw. ALTER TABLE in deiner Version von MySQL in dieser Hinsicht leisten. Hier ein Fundstück aus dem Netz auf der Basis von PHP:

Code:
<?php
global $db_url;
$database = parse_url($db_url);
$result = db_query('show tables');
while($tables = db_fetch_array($result)) {
  foreach ($tables as $key => $value) {
    db_queryd("ALTER TABLE %s COLLATE utf8_general_ci",$value);
  }
}
?>
Vielleicht regt das deine Phantasie etwas an? Überlege auch frühzeitig ob latin1_german1 oder latin1_german2 interessanter für dich ist.

Freundliche Grüße

marabu

Bernhard Geyer 17. Sep 2006 19:14

Re: MySQL und Collations
 
Setze doch für die gesamte Datenbank im CREATE/ALTER-Database die Collation und nicht auf Tabellen/Feldebene.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 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