珍しい文字を含む文字列を(英国英語の文字セットを扱うことに慣れている人にとって)どのように格納するかについて、私は非常に混乱し、戸惑っています。
これが私の例です。
私はこの名前を持っています:Bientôt l'été
これが私のテーブルの作成方法です。
CREATE TABLE MyTable(
'my_id' INT(10) unsigned NOT NULL,
'my_name' TEXT CHARACTER SET utf8 NOT NULL,
PRIMARY KEY(`my_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
この簡略化されたPythonスクリプトを使用して、MySQLデータベースとテーブルに文字列を挿入しようとしています。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
mystring = "Bientôt l'été"
myinsert = [ { "name" : mystring.encode("utf-8").strip()[:65535], "id" : 1 } ]
con = None
con = MySQLdb.connect('localhost', 'abc', 'def', 'ghi');
cur = con.cursor()
sql = "INSERT INTO 'MyTable' ( 'my_id', 'my_name' ) VALUES ( %(id)s, %(name)s ) ; "
cur.executemany( sql, myinsert )
con.commit()
if con: con.close()
次にデータベース内の名前を読み取ろうとすると、次のように保存されます。Bientôt l'été
読んでもらいたい:Bientôt l'été
これを行うためにPythonスクリプト/MySQLデータベースを取得するにはどうすればよいですか?これは文字セットとその設定方法に関係していると思いますが、技術的な専門用語がなければ、これを説明する簡単なWebページを見つけることができません。私はこれに何時間も苦労してきました!
私はこれを見て、character_set_server
設定されているように見えますlatin1
が、これが問題であるかどうか、またはそれを変更する方法がわかりません:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+