2011-08-16 25 views
5

Lý do cho lỗi sau là gì? khi tôi cố gắng để lọc với:lỗi đối chiếu django python

if MyObject.objects.filter(location = aDictionary['address']): 

nơi vị trí được định nghĩa là:

location = models.CharField(max_length=100, blank=True, default='') 

tôi nhận được lỗi sau khi aDictionary [ 'địa chỉ'] chứa một chuỗi với một nhân vật phi tự chữ và số (ví ví dụ Kīhei):

File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaul 
terrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (1267, "Illegal mix of collations (latin1_sw 
edish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='") 

Trả lời

6

Thay đổi cơ sở dữ liệu trong MySQL như vậy:

ALTER TABLE foo CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

Khi tạo một cơ sở dữ liệu mới, hãy nhớ để tạo ra với quyền đối chiếu cài đặt:

CREATE DATABASE foo CHARACTER SET utf8 COLLATE utf8_general_ci; 

Thảo luận nhiều hơn here.

+0

Vì vậy, bạn khuyên bạn nên xóa cơ sở dữ liệu, bao gồm tất cả các bảng và dữ liệu sản xuất có thể để thay đổi đối chiếu? Thay vào đó, thay đổi điều đó thành báo cáo ALTER thì sao? – Jordan

+0

Tôi _swear_ rằng khi tôi gặp sự cố này, tất cả tài liệu cho biết tôi cần DROP và TẠO. Vì vậy, tôi đã nghiên cứu và bạn nói đúng. Đã chỉnh sửa bài đăng. –

+0

Có vẻ tốt với tôi :) – Jordan

0

Python đang sử dụng chuỗi Unicode và cơ sở dữ liệu của bạn không. Thay đổi collation cơ sở dữ liệu của bạn để sử dụng utf8 và bạn nên ổn.

Các vấn đề liên quan