【发布时间】:2017-09-12 06:57:22
【问题描述】:
我想将地址(类型string)存储到数据库字段(类型VARCHAR)中。
问题是有时地址有 Non-ASCII 字符,所以我做了下一个来取它们:
在我的 .py 文件中
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# Other imports...
# The connection with the DB
conn = MySQLdb.connect(host="127.0.0.1", user="myUser", passwd="myPass", db="myDB", charset='utf8', init_command='SET NAMES UTF8')
# More code here...
address2 = address.encode('utf-8')
print "\nTHE ADDRESS TYPE IS -> ", type(address), "\n"
print "\nTHE ADDRESS IS -> ", address, "\n"
print "\nTHE ADDRESS2 IS -> ", address2, "\n"
self.conn.cursor().execute("""INSERT INTO myTable (BLA, BLA, ADDRESS) VALUES (%s, %s, %s)""", (bla, bla, address2))
# The rest of the code...
所以当我运行代码时,我在prints 之后得到以下内容:
THE ADDRESS TYPE IS -> <type 'str'>
THE ADDRESS IS -> Francesc Aragó, 2, 07872 Es Caló, España
THE ADDRESS2 IS -> Francesc Aragó, 2, 07872 Es Caló, España
但是当我进入数据库中的表并访问该字段时,我得到了这个
Francesc Arag?, 2, 07872 Es Cal?, Espa?a
我已经尝试在 mysql 查询中将 address2 更改为 address,以及许多其他尝试,但到目前为止我一无所获......
【问题讨论】:
-
也许 utf-8 不是 mysql 数据库中的默认字符集。如果你启动一个 mysql 控制台并输入“show variables like 'char%';”,你会得到什么结果?
-
VARCHAR 列的排序规则是什么?您可以更改该列以使用不同的排序规则或将其替换为 NVARCHAR 列吗?
-
@GöranPaues :我已经运行了命令,这就是我得到的:
character_set_client -> latin1; character_set_connection -> latin1; character_set_database -> latin1; character_set_filesystem -> binary; character_set_results -> latin1; character_set_server -> latin1; character_set_system -> utf8; character_sets_dir -> /usr/share/mysql/charsets/ -
@TomBlodget : varchar 列的排序规则是
ADDRESS varchar(255) DEFAULT ''我没有创建表,更改该列可能是一个困难的选择... -
@TomBlodget :但无论如何,想想我是否可以改变专栏!你是什么意思 NVARCHAR ?抱歉,我对数据库几乎是新手...