Man kann bei MySQL zu jeder Tabelle angeben, welchen
Zeichensatz sie verwenden soll, dann muss man nicht die
globalen Einstellungen für die ganze Datenbank ändern.
Inzwischen wird üblicherweise UTF-8 verwendet, wie der
Sortieralgorithmus für UTF-8 implementiert ist, weiss ich nicht.
In PHP kann man sich eine deutsche Sortierung einfach selber bauen:
- Code: Select all
// Für Telefonbuchsortierung
$trans = array('ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', 'á' => 'a',
'à' => 'a', 'â' => 'a', 'é' => 'e', 'è' => 'e', 'ê' => 'e',
'í' => 'i', 'ì' => 'i', 'î' => 'i', 'ó' => 'o', 'ò' => 'o', 'ô' => 'o',
'ú' => 'u', 'ù' => 'u', 'û' => 'u', 'ý' => 'y', 'ç' => 'c',
'ø' => 'oe',
'Ä' => 'ae', 'Ö' => 'oe', 'Ü' => 'ue', 'Á' => 'a',
'À' => 'a', 'Â' => 'a', 'É' => 'e', 'È' => 'e', 'Ê' => 'e',
'Í' => 'i', 'Ì' => 'i', 'Î' => 'i', 'Ó' => 'o', 'Ò' => 'o',
'Ô' => 'o', 'Ú' => 'u', 'Ù' => 'u', 'Û' => 'u', 'Ý' => 'y',
'Ç' => 'c', 'Ø' => 'oe');
// Für Wörterbuchsortierung array('ä' => 'a', ... usw.
/* Viele weitere Umlaute machbar, insbesondere für Unicode,
dieses soll aber erstmal ausreichen.
Bitte achte darauf, dass die Strings gleich codiert sind, wie das
Programm, ansonsten muss z.B. mit chr(228) usw. gearbeitet werden.
eventuell noch uft8_decode verwenden */
function compare($eins, $zwei)
{
global $trans;
$eins = strtolower(strtr($eins,$trans));
$zwei = strtolower(strtr($zwei,$trans));
if ($eins == $zwei) return 0;
return ($eins < $zwei) ? -1 : 1;
}
$meinarray = array('Hübner', 'Hubner', 'Huebner', 'André', 'Andre');
// Die $meinarray unsortiert aus der Datenbank nehmen.
usort($meinarray, 'compare');
Performanter ist immer die Sortierung in der Datenbank!