Tags:

คือ ผมใช้งาน python 3 และมีการบันทึกข้อมูลลงฐานข้อมูล mariadb ครับ
วิธีการที่ผมใช้งานใน python 2 คือ

a = u"การทำงาน"
sql = u"insert into a(aa) values('"+a+u"')"
db.execute(sql)
หรือ
sql = u"insert into a(aa) values('%s')"%(a)
db.execute(sql)
หรือ
sql = u"insert into a(aa) values('%s')"
db.execute(sql,(a))

ปรากฏว่า ผมมาใช้งานใน python 3 ผมจะเจอปัญหาว่า insert error ดังด้านล่างตลอดเลยครับ

'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)

ผมลองแก้ไขปัญหา ดังด้านล่าง ก็ไม่ได้ครับ

a = str("การทำงาน").encode('utf-8','ignore')

ซึ่งตอนนี้ผมเลยแก้ไขปัญหา ดังนี้

a = str("การทำงาน").encode('utf-8','ignore').hex()

แต่ในฐานข้อมูลก็จะอ่านไม่ได้เพราะเป็น bytes ซึ่งอยากให้มันเก็บข้อมูลแล้วอ่านออกจากในฐานข้อมูลเลยครับ
รบกวนขอคำแนะนำด้วยครับ

ปล.
ผมลอง query "set names'utf8'" แล้วครับ

Get latest news from Blognone
By: luckyman
ContributoriPhoneAndroidRed Hat
on 16 March 2018 - 01:32 #1038654

ถ้าใช้ mysqlclient ให้เซ็ตตอนสร้าง connection ครับ

import MySQLdb

conn = MySQLdb.connect(user=****, password=****, database=****, use_unicode=True, charset="utf8");

cursor = conn.cursor()
cursor.execute("insert into mytable(name) values('ทดสอบ')")
conn.commit()
conn.close()
By: khao_lek on 16 March 2018 - 16:35 #1038776 Reply to:1038654

ผมแก้ไขได้แล้วครับ แก้ไขเพิ่มตัว use_unicode=True, charset="utf8" ครับ ขอบคุณครับ