Selamlar,
Bir projemde içerik araması yapıyorum. Türkçe karakter araması yaparken sorun yaşıyorum. Sorunun kaynağının ise mysql'da UTF-8 kodlamalı bir kolon ve tabloda büyük hafle yazılmış türkçe karakterleri algılayamadığıydı.
mysql'dan örnek:
mysql> select * from page_categories_langs where name LIKE "%hakkımızda%";
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
| id | category_id | __lang_id__ | name | created_at | updated_at | deleted_at |
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
| 1 | 1 | 1 | Hakkımızda | 2015-04-20 11:30:01 | 2015-04-28 14:14:35 | NULL |
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
1 row in set (0,00 sec)
Ama sorgu kelimesi 'HAKKIMIZDA' yapınca sıfır sonuç dönüyor.
mysql> select * from page_categories_langs where name LIKE "%HAKKIMIZDA%";
Empty set (0,00 sec)
Tablom görüldüğü gibi UTF-8 karekter kodlamalı
| page_categories_langs | CREATE TABLE `page_categories_langs` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned NOT NULL,
`__lang_id__` int(10) unsigned NOT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, // arama yaptığım kolon
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `page_categories_langs_category_id___lang_id___index` (`category_id`,`__lang_id__`),
KEY `page_categories_langs___lang_id___foreign` (`__lang_id__`),
CONSTRAINT `page_categories_langs_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `page_categories` (`id`),
CONSTRAINT `page_categories_langs___lang_id___foreign` FOREIGN KEY (`__lang_id__`) REFERENCES `langs` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
Aslında sorunum türkçe metinleri küçük harf dönüştürüp aramayla çözülüyor.
mysql> select * from page_categories_langs where name LIKE "%hakkımızda%";
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
| id | category_id | __lang_id__ | name | created_at | updated_at | deleted_at |
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
| 1 | 1 | 1 | Hakkımızda | 2015-04-20 11:30:01 | 2015-04-28 14:14:35 | NULL |
+----+-------------+-------------+--------------+---------------------+---------------------+------------+
1 row in set (0,00 sec)
Ama PHP'de Türkçe bir kelimeyi başarı ile küçük harflere dönüştürmenin bir yolunu bulamadım.
PHP Manual'de şunu yapın diyor, ama sonuç istenilen gibi değil. I harfini ingilizce olarak kabul edip 'i' harfine dönüştürüyor.
mb_convert_case('HAKKIMIZDA', MB_CASE_LOWER, 'UTF-8'); // 'hakkimizda'
Çözüm önerisi olan var mı