그래서 내 주요 문제는 내 db 연결 문자열에 charset="utf8"
이 누락되었다는 것이 었습니다. 그 일이 끝나면 다른 모든 일은 쉬웠습니다.
다음은 다른 테스트 케이스가 동일한 문제를 일으키는 경우를 대비해 참고할 테스트 코드입니다. 하나의 db에 특수 값을 삽입 한 다음 해당 db에서 해당 값을 읽고이를 다른 db에 삽입합니다. 제 3 자 도구를 사용하여 db를 쿼리하고 결과를 확인했습니다. 마지막으로 수행 한 테스트는 이름을 기반으로 한 삭제입니다.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
db1 = MySQLdb.connect(host="10.100.10.2",
user="root",
passwd="",
db="db1",
charset="utf8"
)
db1.autocommit(True)
cur1 = db1.cursor()
db2 = MySQLdb.connect(host="10.100.10.2",
user="root",
passwd="",
db="db2",
charset="utf8"
)
db2.autocommit(True)
cur2 = db2.cursor()
valueSpecialCharacters = u"`[email protected]#$%^&*()_+[]\\;',./{}|:\"<>?"
valueSpecialCharacters2 = u"¢¥¦§©«¬®æƸɅɆɜʘɷɸӒӔӥӺӾسشصضطّ٦۞"
valueSpecialCharacters3 = u"۩ᴚᴇᴈᵺḈᵯἃἮᾝᾸ₨₸∑∏∆∂℮ⅎ₲∩∫≈≠≡≤≥⌂℗⅝⅞"
valueSpecialCharacters4 = u"⅓⅔⅛⅜⅍░▒▓■□▪▫▬▲►▼◄◊○◌●◘◙◦☺☻☼♀♂♠♣"
valueSpecialCharacters5 = u"♥♦♪♫♯ⱠⱡⱢⱣⱤⱥⱦⱧﭮצּרּﭓךּﺹﻏ﷼ﻪﻯﻴﻹ ﻼ"
sqlInsert = "INSERT INTO table (tableID, Name) VALUES (%s, %s);"
# Clean tables to make easier to see updates.
cur1.execute("DELETE FROM table")
cur2.execute("DELETE FROM table")
print "1: " + valueSpecialCharacters
args = "1", valueSpecialCharacters
cur1.execute(sqlInsert, args)
print "2: " + valueSpecialCharacters2
args = "2", valueSpecialCharacters2
cur1.execute(sqlInsert, args)
print "3: " + valueSpecialCharacters3
args = "3", valueSpecialCharacters3
cur1.execute(sqlInsert, args)
print "4: " + valueSpecialCharacters4
args = "4", valueSpecialCharacters4
cur1.execute(sqlInsert, args)
print "5: " + valueSpecialCharacters5
args = "5", valueSpecialCharacters5
cur1.execute(sqlInsert, args)
sqlSelect = "SELECT tableID, Name FROM table;"
cur1.execute(sqlSelect)
results = cur1.fetchall()
for row in results:
args = row[0], row[1]
print "args: %s", args
cur2.execute(sqlInsert, args)
# Test of deleting with utf-8
sqlDelete = "DELETE FROM table2 WHERE Name = %s;"
cur1.execute(sqlDelete, valueSpecialCharacters2)
db1.close()
db2.close()
무엇이 문제입니까? 그것들 모두는 유니 코드 (unicode)이다. 아마도 당신은 아마도 그것들을 삽입 할 수있을 것이다. 지금까지 시도한 것은 무엇인가? 그리고 어떤 오류가 있었습니까? 이것은 당신에게 도움이 될 수 있습니다 http://stackoverflow.com/questions/6202726/writing-utf-8-string-to-mysql-with-python –
나는 다른 사람들에게 많은 실수를 저질렀습니다. 내가 기억하는 한 가지는 라틴어 리터럴에 대해 불평하는 것입니다. 내가 문자열을 utf8 또는 유니 코드로 디코딩해야한다면 궁금하다. 나는 아직도 그걸 가지고 놀고 있는데, 네가 아마도 내일 보낸 링크를보고, 어떤 수면이 내일 더 잘 이해하는 데 도움이되는지 알아 보겠다. –
특히 http://stackoverflow.com/a/6203001/541038이 대답 –