很可能,您要做的是將charset='utf8'
添加到您的MySQLdb.connect()
調用中。對於MySQL本身,字符集在許多不同的上下文中分別設置 - 最值得注意的是,對於表存儲和連接(不幸的是,在許多情況下,MySQL似乎仍然默認爲拉丁-1)。所以,你可以 - 例如 - 去設置你的整個數據庫使用UTF-8的麻煩:
CREATE DATABASE somedatabase DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
然而,當您連接客戶端,MySQL的仍然可能會認爲你與它溝通其他一些編碼:
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
一個基本的解決方案是,以連接後立即執行SET NAMES UTF8
,你之前做別的:
mysql> SET NAMES UTF8;
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
然而,在你的情況,這仍然不夠,因爲python MySQLdb模塊本身也希望對你有幫助並自動編碼/解碼python的本地unicode字符串。所以,你必須在MySQLdb中設置字符集。如前所述,這是最好的,在創建MySQLdb連接時傳遞charset='utf8'
。 (這也會導致MySQLdb通知MySQL服務器你的連接正在使用UTF8,所以你不需要直接運行SET NAMES UTF8
)
你用'use_unicode = True'調用'MySQLdb.connect'嗎? –
我忘了看看這個(幾個月前我和java和jdbc有同樣的問題......)。你解決它! – iwalktheline