python编码mysql :(

Hal*_*mil 4 python mysql encoding

我有以下python脚本(tes.py):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import MySQLdb

query = "INSERT INTO test(test) VALUES ('ñ')"
print query + "\n"

conn = MySQLdb.connect (host = "localhost", user = "ibrick", passwd = "x", db = "ibrick", charset="utf8")
conn.names="utf8"
cursor = conn.cursor()
cursor.execute (query);
cursor.close ()
conn.commit ()
Run Code Online (Sandbox Code Playgroud)

文件编码utf-8:

 $ file -i tes.py 
tes.py: text/x-java charset=utf-8
Run Code Online (Sandbox Code Playgroud)

系统编码UTF:

#locale
LANG=es_AR.UTF-8
LC_CTYPE="es_AR.UTF-8"
LC_NUMERIC="es_AR.UTF-8"
LC_TIME="es_AR.UTF-8"
LC_COLLATE="es_AR.UTF-8"
LC_MONETARY="es_AR.UTF-8"
LC_MESSAGES="es_AR.UTF-8"
LC_PAPER="es_AR.UTF-8"
LC_NAME="es_AR.UTF-8"
LC_ADDRESS="es_AR.UTF-8"
LC_TELEPHONE="es_AR.UTF-8"
LC_MEASUREMENT="es_AR.UTF-8"
LC_IDENTIFICATION="es_AR.UTF-8"
LC_ALL=
echo "ñññ" > /tmp/test.txt

file /tmp/test.txt 
/tmp/test.txt: UTF-8 Unicode text
Run Code Online (Sandbox Code Playgroud)

MYsql表编码UTF8:

mysql> show create table test;
+-------+----------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                 |
+-------+----------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `test` varchar(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | 
+-------+----------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

控制台outupt没问题:

#./tes.py 
INSERT INTO test(test) VALUES ('ñ')
Run Code Online (Sandbox Code Playgroud)

问题:

该脚本不会在表中插入..它会插入一个错误的字符:

select * from test;
+------+
| test |
+------+
| ?    | 
| ?    | 
| ?    | 
| ?    | 
| ?    | 
| ?    | 
| ?    | 
+------+
7 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

有人帮我吗?

预先感谢!

Gar*_*tty 7

尝试添加'use_unicode'.

秘密成分是在连接参数中添加charset ="utf8",并使用use_unicode = True.资源

db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME, charset="utf8", use_unicode=True)
Run Code Online (Sandbox Code Playgroud)