当前位置: 首页 > 知识库问答 >
问题:

Python与MySql Unicode问题

郑高驰
2023-03-14

我需要调用MySQL存储过程从我的python脚本。作为参数之一,我传递一个Unicode字符串(俄语),但我得到一个错误;

UnicodeEncodeError:“latin-1”编解码器无法对位置0-1中的字符进行编码:序号不在范围(256)内

我的脚本:

  self.db=MySQLdb.connect("localhost", "usr", "pass", "dbName")
  self.cursor=self.db.cursor()
  args=("какой-то текст") #this is string in russian
  self.cursor.callproc('pr_MyProc', args)
  self.cursor.execute('SELECT @_pr_MyProc_2') #getting result from sp
  result=self.cursor.fetchone()
  self.db.commit()

我已经读过设置charset='utf8'可以解决这个问题,但是当我使用字符串时:

self.db=MySQLdb.connect("localhost", "usr", "pass", "dbName", charset='utf8')

这给了我另一个错误;

UnicodeEncodeError:'utf-8'编解码器不能编码字符'\udcd1'在位置20:代理不允许

此外,我还试图设置parametr使用_unicode=True,但这不起作用。

共有3个答案

景令秋
2023-03-14

MySQLdb模块与python 3不兼容。这可能就是你遇到问题的原因。我建议使用不同的连接器,如PyMySQL或mysqlClient。

相关电话:23376103。

储修谨
2023-03-14

以下是一些想法。也许不是回应。我过去一直在玩python/mysql/utf-8/unicode,我记得:

查看Saltstack mysql模块的评论:

https://github.com/saltstack/salt/blob/develop/salt/modules/mysql.py#L314-L322

# MySQLdb states that this is required for charset usage
# but in fact it's more than it's internally activated
# when charset is used, activating use_unicode here would
# retrieve utf8 strings as unicode() objects in salt
# and we do not want that.
#_connarg('connection_use_unicode', 'use_unicode')
connargs['use_unicode'] = False
_connarg('connection_charset', 'charset')

我们看到,为了避免更改结果字符串,use_unicode被设置为False,而字符集(可能是utf-8)被设置为参数。use_unicode更多的是作为Unicode字符串获取响应的请求。

您可以在以下测试中检查实际使用情况:https://github.com/saltstack/salt/blob/develop/tests/integration/modules/test_mysql.py#L311-L361,数据库名为'標準語'.

现在,关于UnicodeEncodeError消息:“utf-8”编解码器无法编码字符“\udcd1”**。您正在使用**unicode,但您告诉模块它是utf-8。在用utf-8编码unicode字符串之前,它不是utf-8。

也许你应该试试:

args=(u"какой-то текст".encode('utf-8'))

至少在python3中,这是必需的,因为默认情况下,您的“аааа-аааааааааа。

轩辕海
2023-03-14

更多需要检查的东西:http://mysql.rjweb.org/doc.php/charcoll#python

可能的项目:

  • 使用#-*-编码:utf-8-*--->启动代码文件(对于代码中的文字)
  • 文字应该是u'…'

你能提取十六进制吗<代码>аааа-ааааааааааааааааааа

 类似资料:
  • 我对编程相当陌生,发现了一个让你制作游戏的练习。基本上,程序要求3个输入:停止、启动和退出。启动使汽车启动,停止使汽车停止,退出是不言自明的。但是,如果你在汽车已经启动时输入启动,它会告诉你汽车已经启动,依此类推。然而,当我将输入输入到终端时,没有显示任何内容。谁能告诉我我做错了什么? 这是我的密码:

  • 本文向大家介绍python中plt.imshow与cv2.imshow显示颜色问题,包括了python中plt.imshow与cv2.imshow显示颜色问题的使用技巧和注意事项,需要的朋友参考一下 在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。 这是因为:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式 程序运行结果如

  • 问题内容: 我不明白注释和之间的实际区别是什么? 扩展名还是它们具有完全不同的含义?什么时候应该使用它们?在服务层中使用Spring ,在DAO 中使用javax? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法外,还允许CDI bean方法是事务性的。因此,

  • 本文向大家介绍10张动图学会python循环与递归问题,包括了10张动图学会python循环与递归问题的使用技巧和注意事项,需要的朋友参考一下 图像(包括动图)是传递信息的一种高效方式,往往能增强表象、记忆与思维等方面的反应强度。所谓一图胜千言,说的就是这个道理。 今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。代码实例以Python语言编写。 一、循环 GI

  • 问题内容: 我在Windows XP上使用VirtualEnv。我想知道我的大脑是否被正确包裹: 我跑了,它创造了。然后,我将变量更改为include 而不是。然后,我将Django检出到,更新了变量以指向新的Django目录,然后继续执行其他操作(这些当然进入了我的新目录)。 我了解为什么我应该使用VirtualEnv,以便可以在同一台计算机上运行Django的多个版本以及其他库,但这是否意味着

  • 问题内容: 问候大家, 我不确定这是否可行,但我想在正则表达式替换中使用匹配的组来调用变量。 有什么想法吗? 问题答案: 您可以在使用re.sub时指定回调,该回调可以访问组:http : //docs.python.org/library/re.html#text- munging 还注意到额外的吗?在正则表达式中。您要在此处进行非贪心匹配。 我了解这只是说明概念的示例代码,但是对于您给出的示例