Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:284:charsets

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dev:284:charsets [15.11.2018 22:02] Manuela v.d.Deckendev:284:charsets [29.11.2020 05:03] (aktuell) – [UTF-8 und HTML] Manuela v.d.Decken
Zeile 1: Zeile 1:
-====== Charactersets ====== +====== Zeichensätze ====== 
-Charactersetsa complex and often confusing theme, in which a little light should be brought+Zeichensätzeein komplexes und oft auch verwirrendes Thema, in das ein klein wenig Licht gebracht werden soll
-First and foremostwe have to note that at **PHP** we strictly make use of the multibyte encoding by **UTF-8**+Zuallererst müssen wir festhaltendass wir bei **PHP** strikt die Multibyte-Codierung von UTF-8 verwenden
-To learn about the internals of UTF-8 you can visit **[[https://en.wikipedia.org/wiki/UTF-8|Wikipedia]]** +Um mehr über die Internas von UTF-8 zu erfahren, besuche einfach **[[https://en.wikipedia.org/wiki/UTF-8|Wikipedia - UTF-8]]** 
-<div info>\\ Both UTF-8 and UTF-8MB4 from mySQL are 100% compatible to UTF-8 from PHP.</div> +<div info>\\ Beides, UTF-8 und UTF-8MB4 aus mySQL ist 100% kompatibel zu UTF-8 aus PHP.\\ 
-But do not worrythe whole chapter with the character setscollations and so on is only half as complicated as it looks at first glance.\\ +In diesem Dokument sind die Schreibweisen  **utf8**||**utf-8** sowie **utf8mb4**||**utf-8mb4** gleichbedeutend.</div> 
-The knowledge of the character sets in the database is only really needed if you want to design new tables yourself.\\ +Aber keine Sorgedas ganze Kapitel mit ZeichensätzenSortierungen und so weiter ist eigentlich nur halb so kompliziert, wie es auf den ersten Blick aussehen mag.\\ 
-But much more important to programmers is the handling of multibyte string functions in PHP. This can cause serious mistakes if you have not understood the background of the character sets.+Die Kenntnisse über die Zeichensätze in der Datenbank sind nur wirklich wichtig, wenn man selbst neue Datenbanktabellen entwirft.\\ 
 +Für Programmierer ist es wichtiger, den Umgang mit den Multibyte-Stringfunktionen von PHP zu beherrschenDenn wenn man diese nicht richtig verstanden hat, kann es durchaus in schweren Fehlern enden.
  
-===== UTF-8 and PHP ===== +===== UTF-8 und PHP ===== 
-PHP does not know any kind of 'Collationor 'UTF-8mb4or something elseSo forget these in concern to PHP! +PHP selbst kennt weder 'Kollationennoch 'UTF-8MB4noch ähnlichesDiese Dinge können bei PHP vergessen werden
-UTF-8 in PHP exactly matches the definition in **[[https://tools.ietf.org/html/rfc3629|RFC 3629]]** / **ISO/IEC 10646-1:2000 Annex D** and can consist of one and up to four bytes per character. UTF-8 (as well as all Latin fontsis bit-compatible with the first 128 characters of the original ASCII character table.+PHP kennt jedoch UTF-8. Und zwar jenes, das exakt den Definitionen in **[[https://tools.ietf.org/html/rfc3629|RFC 3629]]** / **ISO/IEC 10646-1:2000 Annex D** entspricht und welches aus 1 bis 4 Bytes für jedes Zeichen besteht. UTF-8 (wie auch alle Latin_xxx Zeichensätzeist in den ersten 128 Zeichen identisch zu der originalen ASCII Zeichentabelle.
 <div important> <div important>
-Since a character encoded in UTF-8 can be 1, 2, 3, or even bytes in sizemany of the 'oldstring functions will no longer work correctly!\\ +Da in UTF-8 ein Zeichen mit 1, 2, 3 oder Bytes dargestellt wirdfunktionieren viele der 'altenStringfunktionen nicht mehr korrekt!\\ 
-Please use the corresponding multibyte functions insteadi.e. **mb_strlen()** instead of **strlen()**+Bitte benutzt stattdessen die jeweils korrespondierenden Multibyte Funktionenz.B. **mb_strlen()** anstatt **strlen()**
  
-**Examples:** + 
-Char Codepoint ^ UTF-8 (bin) ^ Naming ^+**Beispiele:** 
 +Zeichen Codepunkt ^ UTF-8 (bin) ^ Benennung ^
 |  a  | U+0061 | 01100001 | LATIN SMALL LETTER A | |  a  | U+0061 | 01100001 | LATIN SMALL LETTER A |
 |  á  | U+00E1 | 11000011 10100001 | LATIN SMALL LETTER A WITH ACUTE | |  á  | U+00E1 | 11000011 10100001 | LATIN SMALL LETTER A WITH ACUTE |
Zeile 28: Zeile 30:
 </PHP> </PHP>
 </div> </div>
-===== UTF-8 and mySQL ===== +===== UTF-8 und mySQL =====
-Unlike PHP, mySQL does not fully implement UTF-8 according to RFC 3629. +
-In mySQL, UTF-8 can only be one to three bytes maximum. As a result, mySQL can not store UTF-8 4-byte characters. +
-In order to solve this problem, the implementation of the UTF-8 character set was not changed, but subsequently the character set UTF-8MB4 was introduced. This character set can store any characters up to all 4 bytes. +
-Now please do not think that these signs would be the same!\\ +
-There is of course a difference that can be very important especially for larger databases.+
  
-The small but subtle difference is the memory consumption of these two charsets.  +Im Gegensatz zu PHP implementiert mySQL nicht die vollständige RFC 3629 Definition von UTF-8
-Whereas UTF-8 dynamically reserves only exactly as many bytes as are needed to represent a character, UTF-8MB4 always occupies each character every bytesBoth in memory and in the databaseThe increased memory requirement also influences the computation timethe accuracy of indicesthe size of the index tables and also the access time+In mySQL kann ein UTF-8 Zeichen nur maximal 3 Bytes groß sein. Daher kann mySQL keine 4-Byte Zeichen als UTF-8 speichern. 
 +Um dieses Problem zu lösenwurde jetzt nicht die UTF-8 Implementierung an die RFC angepasst, sondern es wurde ein neuer, zusätzlicher Zeichensatz 'UTF-8MB4' eingeführt. Dieser Zeichensatz kann jetzt auch 4-Byte Zeichen speichern. 
 +Aber jetzt bitte nicht denken, UTF-8(PHP) und UTF-8MB4 wären das selbe!\\ 
 +Da gibt es weiterhin einen wichtigen Unterschied, der sich speziell bei größeren Datenbanken auswirken kann. 
 +Der kleine aber feine Unterschied besteht im Speicherverbrauch dieser beiden Zeichensätze. 
 +Während UTF-8 dynamisch nur genau soviel Speicherplatz reserviertwie ein Zeichen benötigt, beschlagnahmt UTF-8MB4 für jedes Zeichen grundsätzlich immer volle 4 Bytes. Sowohl im Arbeitsspeicher als auch in der Datenbank.Das erhöht natürlich den Speicherbedarf und beeinflusst sowohl die Verarbeitungszeit als auch die mögliche Genauigkeit von Indizesdie Größe der Indextabellen und dadurch auch die Zugriffszeiten.
  
-**Example ​of memory consumption** +**Beispiel Speicherverbrauch** 
-character set needed memory ^+Zeichensatz Speicherbedarf ^
 |"This is a little text in english, containing 54 signs."|| |"This is a little text in english, containing 54 signs."||
 | UTF-8: | 54 Byte | | UTF-8: | 54 Byte |
Zeile 47: Zeile 49:
 | UTF-8MB4: | 64.000 Byte | | UTF-8MB4: | 64.000 Byte |
  
-oops, your text is about 200 kBYou have lots of such+oops, Dein Text ist um die 200.000 Zeichen großDu hast viele solcher Texte
-===== UTF-8 and HTML ===== +===== UTF-8 und HTML ===== 
-Todayall modern browsers are able to render UTF-8 encoded charactersThereforethere is usually no longer the need to output special characters in HTML entity format.+Heutzutage sind alle modernen Browser in der Lage, UTF-8 codierte Zeichen darzustellenEs gibt -fast- keinen Grund mehrSonderzeichen im HTML-Entity-Format auszugeben. Die wichtigste Ausnahme sind hier direkt anzeigbare Benutzereingaben,bei denen aus Sicherheitsgründen bestimmte Zeichen/Zeichenfolgen maskiert (escaped) werden sollten, damit hier kein Schadcode eingeschleust werden kann.
  
-In any caseit will be helpful for the browser if at least one of the following meta tags is entered in the HEAD section of the HTML document.+Auf jeden Fall ist es für den Browser hilfreichwenigstens eins der folgenden Metatags im Head-Abschnitt eines HTML-Dokumentes auszugeben.
 <PHP><meta http-equiv="content-type" content="text/html;charset=utf-8"> <PHP><meta http-equiv="content-type" content="text/html;charset=utf-8">
  
 <meta charset="UTF-8"></PHP> <meta charset="UTF-8"></PHP>
 ===== Collations ===== ===== Collations =====
-<div info>\\ Collations does not exist in PHP. These are only properties of text fields in database tables.</div> +<div info>\\ Collations existieren nicht in PHP. Diese sind nur Eigenschaften von Textfeldern in Datenbanktabellen!</div> 
-A collation has nothing to do with storage at firstIt exclusively determines the rules according to which texts are sorted in the output.+Eine Collation hat mit Codierung und Speicherung erst einmal nichts zu tunSie bestimmt nur die Regeln, nach denen Texte für die Ausgabe sortiert und verglichen werden. 
 + 
 +Nun, wenn wir auf die Auswahliste der möglichen Collations schauen, dann finden wir für praktisch jeden Zeichensatz eine lange Liste an Möglichkeiten. Einerseits sind da Collations die auf eine einzelne Sprache optimiert sind, andererseits finden wir auch Werte wie **_unicode_ci** und **_general_ci**, welche sprachübergreifend arbeiten.\\
  
-Now, if we look at the selection list of possible collations, we find there for each character set a long list of possibilities. On the one hand, there are sortings that are optimized for one particular language and on the other hand values ​​like **_unicode_ci** and **_general_ci**, which work across languages.\\ +Der Unterschied zwischen **_unicode_ci** und **_general_ci** ist hauptsächlich eine deutlich unterschiedliche Verarbeitungsgeschwindigkeit
-The difference between **_unicode_ci** and **_general_ci** is mainly a different processing speed +Auch die Sortierung ist unterschiedlich'unicode_ci' berücksichtig die wesentlichen Eigenheiten vieler Sprachenwährend 'general_ci' rein Buchstabenorientiert arbeitetDie Sortierung mit 'general_ci' ist deutlich schneller, aber auch viel weniger sprachbezogen und daher ungenauer als 'unicode_ci'.\\ 
-The sorting with **_general_ci** works much fasterbut a bit more inaccurate than with **_unicode_ci**.  +Da unsere Datenbanken (auch die größten) relativ klein sind (10.000 Datensätze ist in der Welt der Datenbanken fast nichtsund auch im Hinblick auf die Mehrsprachigkeitbenutzen wir normalerweise immer die 'unicode_ci' Collation um die UTF-8MB4 Texte zu sortieren.\\
-Since our databases are relatively small (10,000 entries in a table are indeed very few in the world of databasesand also in terms of multilingualismwe usually use the **_unicode_ci** sorting of the **UTF-8MB4** character set. +
-But no rule without exception. Text fields that contain only 7-bit characters (ASCII), such as `passwordhash`,` rememberkey` and the like, are defined with the character set '**ascii**' and the collation '**_general_ci**'.+
 ===== Links ===== ===== Links =====
   * [[https://en.wikipedia.org/wiki/UTF-8|Wikipedia UTF-8]]   * [[https://en.wikipedia.org/wiki/UTF-8|Wikipedia UTF-8]]
dev/284/charsets.1542319324.txt.gz · Zuletzt geändert: 15.11.2018 22:02 von Manuela v.d.Decken