2013-09-05 30 views
9

Tôi đã triển khai thành công Ignited-Datatables. Tuy nhiên, trong khi tìm kiếm với cơ sở dữ liệu khi gõ "phi latin" ký tự như "I, S, G, .."Kết hợp các collations bất hợp pháp cho hoạt động 'like' trong khi tìm kiếm với Ignited-Datatables

POST http://vproject.dev/module/user/ign_listing 500 (Internal Server Error)

Cụ thể:

Illegal mix of collations for operation 'like' while searching 
... (u.id_user LIKE '%Ä°%' OR u.first_name LIKE '%Ä°%' OR u.last_name LIKE '%Ä°%' OR ue.email LIKE '%Ä°%' OR u.last_login LIKE '%Ä°%') ... 

%Ä°% thay đổi phần theo ký tự không phải latin bạn đã nhập.

Bất kỳ ý tưởng nào để giải quyết vấn đề này?

+0

Một tùy chọn là sử dụng 'chuyển đổi (datefield sử dụng utf-8)' ... – bbonev

Trả lời

13

Tôi đã tìm ra sự cố. Có vẻ như đây là các trường DATETIME gây ra sự cố.

.. ue.last_login '%ayşenur%' 

cung cấp lỗi cho Illegal mix of collations for operation 'like'. Khi tôi xóa LIKE partials DATETIME trường, không còn lỗi nào nữa. Tôi hi vọng cái này giúp được.

+1

Merhaba. bạn đã khắc phục sự cố này mà không xóa DATETIME chưa? – Rashad

+3

Không, LIKE và DATETIME incompitablity là một vấn đề MySQL. Hy vọng sẽ được cố định trong các phiên bản sau. – YahyaE

+0

Như tôi đã hiểu, vấn đề là trên các bản tóm tắt JSON UNICODE. Vì vậy, trong PHP 5.4 nó sẽ hoạt động. Bạn đã thử nó ở phiên bản PHP mới nhất chưa? – Rashad

3

Hãy thử như sau:

u.id_user LIKE '%Ä°%' OR ... OR ... '%Ä°%' COLLATE utf8_bin 

Tham khảo MySQL Unicode Character Sets

Ngoài ra bạn có thể tham khảo MySQL _bin and binary Collations để biết thêm thông tin về utf8_bin:

chuỗi

Nonbinary (như lưu trữ trong các CHAR, VARCHAR và dữ liệu TEXT loại) có bộ ký tự và đối chiếu. Một bộ ký tự nhất định có thể có một số collations, mỗi trong số đó xác định một phân loại cụ thể và thứ tự so sánh cho các ký tự trong tập hợp. Một trong số này là đối chiếu nhị phân cho tập ký tự, được biểu thị bằng hậu tố _bin trong tên đối chiếu. Ví dụ: latin1 và utf8 có số nhị phân collations có tên latin1_bin và utf8_bin.

+0

Cảm ơn kiến ​​thức nhưng nó không hoạt động. Tôi nghĩ rằng đó là điều gì đó về cách thư viện xử lý dữ liệu bài đăng. – YahyaE

+0

Tại sao bạn không thử 'var_dump ($ this-> input-> post());' trong bộ điều khiển của bạn để xem chính xác những gì CI đang làm với những ký tự đó. – doitlikejustin

+0

Tôi đã làm. Đó là nơi mà vấn đề là. Tôi xếp chồng lên nhau với điều này, làm thế nào đến bài không phải là utf-8? – YahyaE

1

tôi biết rằng quá muộn, nhưng, ở đây giải pháp thay thế của tôi.

SELECT * FROM (SELECT DATE_FORMAT(some_date,'%d/%m/%Y') AS some_date FROM some_table)tb1 
WHERE some_date LIKE '% $some_variable %' 

datetime/ngày cột cho lỗi cho sự pha trộn bất hợp pháp của collations cho hoạt động 'như' Do đó, bằng cách chuyển đổi nó, như là một thực thể bảng, loại cột trước đó sẽ được thay thế bằng loại varchar.

cũng, đảm bảo chuyển đổi bất kỳ cột nào trước khi chuyển đổi thành bảng tạm thời, để làm cho quá trình kết hợp dễ dàng hơn.

+0

Không ở vị trí để kiểm tra nó nhưng tôi thích ý tưởng. – YahyaE

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