2013-09-05 10 views
9

Pomyślnie zaimplementowałem Ignited-Datatables. Jednak podczas poszukiwania w bazie danych podczas wpisywania "non-łacińskiego" znaki takie jak "I, S, G .."Nielegalna mieszanka sortowania dla operacji "podobnych" podczas wyszukiwania z zapisem-datatablami

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

Szczegóły są:

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 '%Ä°%') ... 

%Ä°% część zmienia się zgodnie z wpisany przez Ciebie alfabet łaciński.

Każdy pomysł na rozwiązanie tego problemu?

+0

Jedną z opcji jest użycie 'convert (datefield using utf-8)' ... – bbonev

Odpowiedz

13

Wymyśliłem problem. Wygląda na to, że pola DATETIME powodują problem.

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

daje błąd dla Illegal mix of collations for operation 'like'. Po usunięciu pól LIKE partials, nie ma już błędu. Mam nadzieję, że to pomoże.

+1

Merhaba. czy naprawiłeś ten problem bez usuwania DATETIME? – Rashad

+3

Niepołączalność LIKE i DATETIME jest problemem MySQL. Mam nadzieję, że zostaną naprawione w późniejszych wersjach. – YahyaE

+0

Jak rozumiem, problem dotyczy JSON UNICODE DECODES. Tak więc w PHP 5.4 powinno działać. Czy wypróbowałeś ją w najnowszej wersji PHP? – Rashad

3

Spróbuj wykonać następujące czynności:

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

Patrz MySQL Unicode Character Sets

Ponadto można zapoznać się MySQL _bin and binary Collations więcej informacji na utf8_bin:

Nonbinary ciągi (zapisane na CHAR, VARCHAR i typy danych TEXT ) mają zestaw znaków i sortowanie. Dany zestaw znaków może mieć kilka zestawień, z których każdy definiuje określone sortowanie i kolejność porównania dla znaków w zestawie. Jednym z nich jest sortowanie binarne dla zestawu znaków, wskazane przez sufiks _bin w nazwie sortowania. Na przykład łacińskie1 i utf8 mają binarne kolekcje o nazwach latin1_bin i utf8_bin.

+0

Dzięki za wiedzę, ale to nie zadziałało. Myślę, że jest to coś o tym, jak biblioteka obsługuje dane postów. – YahyaE

+0

Dlaczego nie spróbujesz 'var_dump ($ this-> input-> post());' w kontrolerze, aby zobaczyć dokładnie co CI robi z tymi znakami. – doitlikejustin

+0

Zrobiłem. Tutaj jest problem. Jestem spakowany tym, jak to jest, że nie jest to utf-8? – YahyaE

1

Wiem, że to zdecydowanie za późno, ale tutaj moje obejście.

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

datetime/data kolumna daje błąd dla nielegalnych mix sortowania dla pracy „jak”, dlatego, przekształcając go jako innego podmiotu stołowego, poprzedni typ kolumna będzie zastąpić typu varchar.

również przekonwertuj dowolną kolumnę przed przekonwertowaniem jej na tabelę tymczasową, aby ułatwić proces dopasowywania.

+0

Nie jestem w stanie go przetestować, ale spodobał mi się ten pomysł. – YahyaE

Powiązane problemy