Pythonプログラムを使用して、Unicode文字を含むテキストをMySQL データベースに書き込みます。例として、文字の二人は、私は、MySQLに関わるほぼすべての文字セットのためにutf8mb4使用MySQLコマンドラインツールでUnicodeを正しく表示する方法
u'\u2640' a symbol for Venus or female
u'\u2642' a symbol for Mars or male
です。 、ユニコードの治療が動作するものを除くすべての点で
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
:ここ は
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
default-character-set=utf8mb4
character-set-server =utf8mb4
character_set_system =utf8mb4
また、すべてのテーブルは、これらのパラメータを使用して作成されている/etc/mysql/my.cnfからの抜粋です。ちょうど良い。私は ユニコードをデータベーステーブルに書き込んだり、読み込んだり表示したりすることができますが、 の問題はありません。例外はMySQLコマンドラインツールであるmysqlです。私はここで、金星と 火星Unicode文字を含むテーブル内の行を見てSELECT文を実行 とき、私は画面に表示されるものである:私は、右の欄に表示されるはずです何
| Venus | ♀ |
| Mars | ♂ |
は標準グリフです金星と 火星です。
MySQLコマンドラインツールでユニコード を正しく表示する方法については、
編集:
私は様々なMySQLのシステムに 変数などを研究のかなりの量を行っている、と私は今、上に示したのmy.cnfの設定は いくつかの深刻な問題を抱えていることを実現します。実際には、サーバーmysqldは、 の設定では起動しませんでした。
default-character-set=utf8mb4
character-set-system=utf8mb4
私は[クライアント]オプションは何もしないことはよく分からないが、それは 傷つけていないようです:物事を修正するには、[mysqldを]からこれらを削除します。
Pythonのu '\ u2640'は、単一のUnicode文字「♀」を表します。この は、16進値E29980を含む3バイトまでコンパイルします。私は にUnicodeのすべてのエンコードとデコードに問題はありません。正しい値は で、MySQLテーブルに格納されています。それらが正しく、テーブルから読み出され、 Pythonプログラムによって表示されたとき、彼らはこのように表示されています
♀ Venus
♂ Mars
プログラムの出力は、などのテキストエディタ、 によって処理されたファイルにリダイレクトすることができ、すべての場合、正しいUnicode記号が表示されます。
正しいUnicodeシンボルが表示されない場所は、 です。これは、MySQLコマンドラインツールを使用しているときです。 Unicodeシンボルを含むテーブルに対して SELECT文を発行すると、上記の迷惑メール が表示されます。これはWindows固有の問題ではありません。私は、Windows、Mac OS X、 、およびUbuntuでMySQLコマンドラインツールを実行したときと全く同じ 問題を持っています。
実際にどのバイトが列に格納されているかを調べるには、 'HEX'関数を使うことをお勧めします。 'SELECT symbol_name、HEX(symbol_bytes)FROM ...' VenusのUnicode文字の場合、UTF8で正しくエンコードされていれば、 'E29980'が必要です。 – spencer7593