v2.5.2
Giriş yap

MYSQL JSON Veride Türkçe Karakterli Veriyi Sorgulama

byvenoms
355 defa görüntülendi

Merhaba, veritabanımda json veriler var ve json veriler içinden sorgulama yapmam gerekiyor. Şu şekilde kullanıyorum:

SELECT * FROM `siparisler` WHERE JSON_EXTRACT(`musteriler`, '$[*].isim') LIKE '%Enes%'

Böyle kullandığım zaman hiçbir sorun yok fakat içinde Türkçe karakter geçen bir veri aramak istediğim zaman veriyi bulamıyorum. Soyadımdan örnek olarak gideyim

SELECT * FROM `siparisler` WHERE JSON_EXTRACT(`musteriler`, '$[*].isim') LIKE '%Hürüm%'

Hiçbir sonuç dönmüyor. İncelediğim zaman ü harfleri \u00fc şeklinde kayıt edilmiş olarak görünüyor. Dedim o zaman ü harflerinin yerinen \u00fc yazarak arama yapayım.

SELECT * FROM `siparisler` WHERE JSON_EXTRACT(`musteriler`, '$[*].isim') LIKE '%H\u00fcr\u00fcm%'

Fakat böyle de bir sonuç dönmüyor. \u00fc yazıp aradığım zaman sonuç dönüyor ama sadece 1 harfine bakarak aramış oluyorum. Çözümünü bilenlerden yardım talep ediyorum. Teşekkür ederim

Cevap yaz
Cevaplar (3)
byvenoms
914 gün önce

Evet, bunu çok geç öğrendim. Hali hazırda kaydedilmiş veriler olduğu için verdiğim örnekteki gibi çözmek zorunda kaldım.

abdullahx
914 gün önce

Php kullandığınızı ve json veriyi veri tabanına kayıt ederken array den çevirdiğinizi varsayarak şunu söyleyebilirim. json_encode fonksiyonuna flag olarak JSON_UNESCAPED_UNICODE kullanırsanız Türkçe karakterler bozulmadan kayıt edilir.

byvenoms
914 gün önce
SELECT * FROM `siparisler` WHERE JSON_EXTRACT(REPLACE(
                                                    REPLACE(
                                            			REPLACE(
                                            					REPLACE(
                                            						REPLACE(
                                            							REPLACE(
                                            								REPLACE(
                                            									REPLACE(
                                            										REPLACE(                            
                                            											REPLACE(
                                            												REPLACE(                            
                                            													REPLACE(`musteriler`, 
                                            														'\\u00e7', 'ç'), 
                                            														'\\u011f', 'ğ'), 
                                            														'\\u0131', 'ı'), 
                                            														'\\u00f6', 'ö'), 
                                            														'\\u015f', 'ş'), 
                                            														'\\u00fc', 'ü'), 
                                            														'\\u00c7', 'Ç'),                                                          
                                            														'\\u0130', 'İ'),
                                            														'\\u011e', 'Ğ'),
                                            														'\\u00d6', 'Ö'),
                                            														'\\u015e', 'Ş'),
                                            														'\\u00dc', 'Ü'), '$[*].isim') LIKE '%Hürüm%'

Çözümü böyle bulabildim. Daha kısa bi çözümü olan varsa bilgi verebilir.