Tôi có một cơ sở dữ liệu (mysql), nơi tôi muốn lưu trữ dữ liệu ngâm.Làm thế nào để chọn unicodes và lưu chúng trong cơ sở dữ liệu utf-8
Dữ liệu có thể là từ điển, có thể chứa unicode, ví dụ:
data = {1 : u'é'}
và cơ sở dữ liệu (mysql) nằm trong utf-8.
Khi tôi dưa,
import pickle
pickled_data = pickle.dumps(data)
print type(pickled_data) # returns <type 'str'>
các pickled_data kết quả là một chuỗi.
Khi tôi cố gắng lưu trữ điều này trong cơ sở dữ liệu (ví dụ: trong Textfield), điều này có thể gây ra sự cố. Cụ thể, tôi nhận được một số điểm là
UnicodeDecodeError "'utf8' codec can't decode byte 0xe9 in position X"
khi cố gắng lưu dữ liệu đã chọn trong cơ sở dữ liệu. Điều này có ý nghĩa bởi vì pickled_data có thể có các ký tự không phải là utf-8. Câu hỏi của tôi là làm thế nào để lưu trữ pickled_data trên một cơ sở dữ liệu utf-8?
tôi nhìn thấy hai ứng cử viên có thể:
Mã hóa kết quả của pickle.dump để utf-8 và lưu trữ nó. Khi tôi muốn pickle.load, tôi phải giải mã nó.
Lưu trữ chuỗi đã chọn ở định dạng nhị phân (như thế nào?), Buộc tất cả các ký tự nằm trong ascii.
Vấn đề của tôi là tôi không thấy hậu quả của việc chọn một trong các tùy chọn này trong thời gian dài. Kể từ khi thay đổi đã yêu cầu một số nỗ lực, tôi được thúc đẩy để yêu cầu một ý kiến về vấn đề này, yêu cầu cho các ứng viên tốt hơn cuối cùng.
(PS Đây là ví dụ hữu ích trong Django)
Tùy chọn 3: Lưu trữ dữ liệu unicode dưới dạng chuỗi được mã hóa UTF-8. –
Tùy chọn 4: Sử dụng loại cột nhị phân thay thế. –
Dữ liệu Pickle là dữ liệu * nhị phân *. Bạn không thể mã hóa thành UTF-8 (mã hóa văn bản). –