Python 如何将编码值存储到数据库中
我想将地址(typePython 如何将编码值存储到数据库中,python,mysql,string,utf-8,Python,Mysql,String,Utf 8,我想将地址(typestring)存储到数据库字段(typeVARCHAR)中。 问题是,有时地址包含非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", pass
string
)存储到数据库字段(typeVARCHAR
)中。
问题是,有时地址包含非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...
因此,当我运行代码时,在打印后,我会得到以下内容:
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
我尝试过在mysql查询中更改address
的address 2
,还有很多其他尝试,但到目前为止我什么都没有…您的数据库使用的是拉丁语1,所以解决问题的方法是在mysql数据库中使用UTF-8。有关如何将现有数据库转换为UTF-8的信息,请参阅本文:
为了确保您未来的数据库也使用utf-8,请查看这篇关于如何更改的帖子:
您也可以在Python代码中使用latin1而不是utf-8,但utf-8已经成为事实上的标准,因此最好是您的数据库使用它。您的数据库使用latin1,因此解决问题的方法是在MySQL数据库中使用utf-8。有关如何将现有数据库转换为UTF-8的信息,请参阅本文:
为了确保您未来的数据库也使用utf-8,请查看这篇关于如何更改的帖子:
您也可以在Python代码中使用latin1而不是utf-8,但utf-8已成为事实上的标准,因此最好是您的数据库使用它。请参阅:
- 要存储的字节未编码为utf8/utf8mb4。-大概是
init_命令
解决了这个问题
- 数据库中的列是字符集utf8(或utf8mb4)。——这个好像坏了
- 此外,检查读取期间的连接是否为UTF-8
如果您还有其他问题,请按照上面链接中的“测试数据”
Python提示如下:请参阅中的“问号”:
- 要存储的字节未编码为utf8/utf8mb4。-大概是
init_命令
解决了这个问题
- 数据库中的列是字符集utf8(或utf8mb4)。——这个好像坏了
- 此外,检查读取期间的连接是否为UTF-8
如果您还有其他问题,请按照上面链接中的“测试数据”
Python提示:也许utf-8不是mysql数据库中的默认字符集。如果启动mysql控制台并键入“show variables like'char%';”,会得到什么结果?VARCHAR列的排序规则是什么?你能改变该列以使用不同的排序规则,或者用NVARCHAR列替换它吗?@GöranPaues:我已经运行了命令,我得到的结果是:character\u set\u client->latin1;字符集连接->拉丁1;字符集数据库->拉丁1;字符集文件系统->二进制;字符集结果->拉丁1;字符集服务器->拉丁1;字符集系统->utf8;character\u sets\u dir->/usr/share/mysql/charsets/
@TomBlodget:varchar列的排序规则是这一个地址varchar(255)默认值“”
我没有创建表,修改该列可能是一个困难的选择…@TomBlodget:但是无论如何,想想看,如果我可以修改该列!你对NVARCHAR是什么意思?对不起,我几乎是数据库新手……也许utf-8不是mysql数据库中的默认字符集。如果启动mysql控制台并键入“show variables like'char%';”,会得到什么结果?VARCHAR列的排序规则是什么?你能改变该列以使用不同的排序规则,或者用NVARCHAR列替换它吗?@GöranPaues:我已经运行了命令,我得到的结果是:character\u set\u client->latin1;字符集连接->拉丁1;字符集数据库->拉丁1;字符集文件系统->二进制;字符集结果->拉丁1;字符集服务器->拉丁1;字符集系统->utf8;character\u sets\u dir->/usr/share/mysql/charsets/
@TomBlodget:varchar列的排序规则是这一个地址varchar(255)默认值“”
我没有创建表,修改该列可能是一个困难的选择…@TomBlodget:但是无论如何,想想看,如果我可以修改该列!你对NVARCHAR是什么意思?对不起,我对数据库几乎是新手…你是说上面显示的这行character\u set\u database->latin1
的所有内容吗?这只是需要检查的几件事之一。是的,这表明你的数据库编码是latin1,不是utf-8。你的意思是上面显示的这一行character\u set\u database->latin1
?这只是需要检查的几件事之一。是的,这表明你的数据库编码是latin1,而不是utf-8。
Francesc Arag?, 2, 07872 Es Cal?, Espa?a