Potrzebuję wywołać procedurę przechowywaną MySQL z mojego skryptu python. Jako jeden z parametrów przekazuję ciąg znaków Unicode (język rosyjski), ale pojawia się błąd;Python z problemami z Unicode MySql
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)
Mój skrypt:
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()
Czytałem, że ustawienie charset='utf8'
shuld rozwiązać ten problem, ale kiedy używam ciąg:
self.db=MySQLdb.connect("localhost", "usr", "pass", "dbName", charset='utf8')
To daje mi kolejny błąd;
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd1' in position 20: surrogates not allowed
Również próbuję ustawić parametr use_unicode=True
, który nie działa.
Czy to działa, jeśli wysłać ciąg Unicode: 'args = (u "какой-то текст") '? –
@ DanielRoseman nie, też tego wypróbowałem. – Gleb
to jest python 2 lub 3? –