Αρχικά να πω ότι δεν πείραξα το collation της βάσης ή του κάθε πεδίου ξεχωριστά. Είναι όλα utf8-bin.
Η αλλαγή που περιγραφω πιο κάτω αφορά το search στο front-end by keword. Οι αλλαγές μπορούν να επεκταθούν και στο search by tag front-end και στο διαχειριστικό, γενικά όπου υπάρχει search.
πχ.
- catalog/model/catalog/product.php
- function getTotalProductsByKeyword(...)
ας πάρουμε τη γραμμή που λέει:
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";
1)
Code: Select all
strtolower($keyword)
Code: Select all
mb_strtolower($keyword,'UTF-8')
Code: Select all
COLLATE utf8_general_ci
Άρα η γραμμή διαμορφώνεται ως εξής
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci ";
Οι αλλαγές αυτές πρέπει να γίνουν σε αρκετα σημεία μέσα στο αρχείο που αναφέρω πιο πάνω και το on-the-fly conversion του πεδίου να προστίθεται μετα από κάθε αναφορά πεδίου στο ερώτημα.
δηλαδή...
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci OR LCASE(pd.description) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci";