web-dev-qa-db-fra.com

Pourquoi MySQL utilise latin1_swedish_ci par défaut?

Est-ce que quelqu'un sait pourquoi latin1_swedish est la valeur par défaut pour MySQL. Il me semble que l'UTF-8 serait plus compatible non?

Les valeurs par défaut sont généralement choisies car elles constituent le meilleur choix universel, mais dans ce cas, il ne semble pas que ce soit ce qu'elles ont fait.

51
Metropolis

Pour autant que je puisse voir, latin1 était le jeu de caractères par défaut à l'époque pré-multi-octets et il semble que cela ait été poursuivi, probablement pour des raisons de compatibilité descendante (par exemple pour les anciennes instructions CREATE qui ne spécifiaient pas de classement).

De ici :

Ce que 4.0 a fait

MySQL 4.0 (et les versions antérieures) ne supportait que ce qui équivalait à une notion combinée de jeu de caractères et de classement avec des encodages de caractères à un octet, qui était spécifiée au niveau du serveur. La valeur par défaut était latin1, qui correspond à un jeu de caractères latin1 et à un classement de latin1_swedish_ci dans MySQL 4.1.

Quant à savoir pourquoi suédois, je peux seulement deviner que c'est parce que MySQL AB est/était suédois. Je ne vois aucune autre raison pour choisir ce classement, il est livré avec des bizarreries de tri spécifiques (ÄÖÜ viennent après Z je pense) mais elles sont loin d'être une norme internationale.

39
Pekka 웃

latin1 est le jeu de caractères par défaut. Le latin1 de MySQL est le même que le jeu de caractères Windows cp1252. Cela signifie qu'il est identique à l'ISO 8859-1 officiel ou à l'IANA (Internet Assigned Numbers Authority) latin1, sauf que l'IANA latin1 traite les points de code entre 0x80 et 0x9f comme "non définis", tandis que cp1252, et donc latin1 de MySQL, attribuent des caractères pour ces postes.

de

http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html

Pourrait vous aider à comprendre pourquoi.

6
bear

L'utilisation d'un codage à un octet présente certains avantages par rapport aux liaisons à plusieurs octets, par ex. la longueur d'une chaîne en octets est égale à la longueur de cette chaîne en caractères. Donc, si vous utilisez des fonctions comme SUBSTRING, il n'est pas clair intuitivement si vous voulez dire des caractères ou des octets. De plus, pour les mêmes raisons, il nécessite une modification assez importante du code interne pour prendre en charge les encodages multi-octets.

2
AndreKR

La plupart des caractéristiques étranges de ce type sont historiques. Ils l'ont fait comme ça il y a longtemps, et maintenant ils ne peuvent pas le changer sans casser une application en fonction de ce comportement.

Peut-être que l'UTF8 n'était pas populaire à l'époque. Ou peut-être que MySQL ne prenait pas en charge les jeux de caractères où plusieurs octets codent alors sur le caractère.

0
CodesInChaos