MySQL CHAR () - Funktion und UTF8 Ausgabe?
+--------------------------+--------------------------------------------------------+ | Variable_name | Wert | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.1.41-osx10.5-x86_64/share/charsets/| +--------------------------+--------------------------------------------------------+ 8 rows in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.1.41 | +-----------+ 1 row in set (0.00 sec) mysql> select char(0x00FC); +--------------+ | char(0x00FC) | +--------------+ | ? | +--------------+ 1 row in set (0.00 sec)
Erwarten tatsächliche utf8-Zeichen --> " ü "statt" ? "Versucht char(0x00FC mit utf8) auch, aber nicht gehen.
Mysql version 5.1.41
Worden allover Google, nicht finden können, was auf dieser. Die MySQL-docs einfach sagen, dass multibyte-Ausgabe wird voraussichtlich auf Werte größer als 255, nach mysql-version 5.0.14.
Dank
- Welcher Zeichensatz ist Ihre shell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwechselst du UTF-8 mit Unicode.
0x00FC ist die Unicode code point für ü:
In UTF-8 Kodierung, 0x00FC wird durch zwei bytes dargestellt:
UTF-8 ist nur ein Weg von Codierung Unicode-Zeichen in binärer form. Es soll Raum effizienter, und das ist der Grund, warum ASCII-Zeichen nur ein byte, und iso-8859-1-Zeichen wie ü nur zwei bytes. Einige andere Zeichen nehmen, drei oder vier bytes, aber Sie sind viel weniger verbreitet.
Hinzufügen Martin ' s Antwort:
Können Sie einen "introducer" statt der
CHAR()
Funktion. Um dies zu tun, geben Sie die Codierung mit einem Unterstrich als Präfix, bevor der code point:oder:
Wenn das Ziel ist, geben Sie den code zeigen, anstatt die kodierte byte-Folge, dann müssen Sie eine Codierung mit dem code-point-Wert nur passiert das kodierte byte-Folge. Zum Beispiel, wie gezeigt in Martin ' s Antwort
0x00FC
ist der code-point-Wert fürü
- und der-kodierte byte-Folge fürucs2
/utf16
(Sie effektiv die gleiche Codierung für die BMP-Zeichen, aber ich bevorzuge die "utf16", wie es im Einklang mit "utf8" und "utf32", konsequent in der "utf" - Thema).Aber
utf16
funktioniert nur für die BMP-Zeichen (code points von U+0000 - U+FFFF) in Bezug auf die Angabe der code-point-Wert. Wenn Sie möchten, einen Ergänzenden Charakter haben, dann müssen Sie dieutf32
Codierung. Nicht nur, dass_utf32 0xFC
zurückü
, aber:gibt: ?
Für weitere Informationen über diese Optionen, plus Unicode-escape-Sequenzen für andere Sprachen und Plattformen, sehen Sie bitte mein post:
Unicode-Escape-Sequenzen in Verschiedenen Sprachen und Plattformen (einschließlich Sonderzeichen)