6
+ -------------------------- + ---------------------- ---------------------------------- +
| Variable_name | 値|
+ -------------------------- + ---------------------- ---------------------------------- +
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | バイナリー|
| 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行(0.00秒)

mysql> select version();
+ ----------- +
| version()|
+ ----------- +
| 5.1.41 |
+ ----------- +
セットの1行(0.00秒)

mysql> select char(0x00FC);
+ -------------- +
| char(0x00FC)|
+ -------------- +
| ?|
+ -------------- +
セットの1行(0.00秒)

実際のutf8文字を期待しています->"?"の代わりに"ü"もchar(utf8を使用して0x00FC)を試しましたが、失敗しました。

mysqlバージョン5.1.41の使用

グーグルのいたるところにいて、これについて何も見つけることができません。MySQLのドキュメントには、mysqlバージョン5.0.14以降、255を超える値でマルチバイト出力が期待されると単純に記載されています。

ありがとう

4

2 に答える 2

8

UTF-8とUnicodeを混同しています。

0x00FCは、üのUnicodeコードポイントです。

mysql> select char(0x00FC using ucs2);
+----------------------+
| char(0x00FC using ucs2) |
+----------------------+
| ü                   | 
+----------------------+

UTF-8エンコーディングでは、0x00FCは2バイトで表されます

mysql> select char(0xC3BC using utf8);
+-------------------------+
| char(0xC3BC using utf8) |
+-------------------------+
| ü                      | 
+-------------------------+

UTF-8は、Unicode文字をバイナリ形式でエンコードする方法にすぎません。これはスペース効率を高めることを目的としているため、ASCII文字は1バイトしか使用せず、üなどのiso-8859-1文字は2バイトしか使用しません。他のいくつかの文字は3バイトまたは4バイトかかりますが、それほど一般的ではありません。

于 2010-03-05T03:29:01.467 に答える
1

マーティンの答えに追加する:

  1. 関数の代わりに「イントロデューサー」を使用できますCHAR()。これを行うには、コードポイントの前にアンダースコアをプレフィックスとして付けたエンコーディングを指定します。

    _utf16 0xFC
    

    また:

    _utf16 0x00FC
    
  2. エンコードされたバイトシーケンスではなくコードポイントを指定することが目的の場合は、コードポイント値がエンコードされたバイトシーケンスであるエンコードを使用する必要があります。たとえば、Martinの回答に示されているように、は/0x00FCのコードポイント値üとエンコードされたバイトシーケンスの両方です(これらは実質的にBMP文字のエンコードと同じですが、「utf8」と一貫しているため「utf16」を使用することをお勧めしますおよび「utf32」、「utf」テーマで一貫しています)。ucs2utf16

    ただし、utf16コードポイント値の指定に関しては、BMP文字(コードポイントU + 0000-U + FFFF)に対してのみ機能します。補足文字が必要な場合は、utf32エンコーディングを使用する必要があります。_utf32 0xFC戻るだけでなくü、:

    _utf32 0x1F47E
    

    戻り値:

于 2019-06-27T06:19:16.343 に答える