Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL ve MsSQL Md5 Fonksiyon Sonuçları Eşleşmiyor
#1
Question 
Merhaba

MySQL ve MsSQL tarafında "Türkçe karakter içeren" aynı verinin md5 hash değerleri bir birini tutmuyor.

Sadece MySQL tarafında işlem yapabileceğim için çözüm öneren arkadaşların bu noktaya dikkat etmesini rica ederim.
Diğer bir nokta MySQL tarafında database charset ve collation ları değiştirme imkanım yok, sorgu içerisinde halletmenin bir yolunu arıyorum.

MsSQL Tarafı:
Versiyon: 2014
Collation : Turkish_CI_AS

Sorgu
select LOWER( CONVERT(VARCHAR(32), HashBytes('MD5', 'basarı'), 2))
Sonuç: 167451e0e05be198281394ac586902d0


MySQL tarafı:
Charset : UTF8
Collation: utf_general_ci
Version Mysql Cluster  7.3


SELECT md5('basarı')
Sonuç: 653b61976b76a3c8d42163e06a72e7b6
Cevapla
#2
select içinde COLLATE ile denedin mi?

select   md5('basari' COLLATE utf8_turkish_ci) 
Cevapla
#3
(21-12-2017, Saat: 17:00)meko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.select içinde COLLATE ile denedin mi?

select   md5('basari' COLLATE utf8_turkish_ci) 

Evet denemiştim ama  doğru sonucu ( MsSQL ile aynı sonucu) vermedi
Cevapla
#4
Bu şekilde dener misin?
select LOWER( CONVERT(VARCHAR(32), HashBytes('MD5', N'basarı'), 2))
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
(21-12-2017, Saat: 22:48)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Bu şekilde dener misin?
select LOWER( CONVERT(VARCHAR(32), HashBytes('MD5', N'basarı'), 2))

Cevabınız için teşekkürler fakat md5 hash lenmiş data Mssql tarafında üretiliyor ve Mysql tarafına çekiyoruz. Hashlenen bu veriyi bizde mysql tarafında kullanıyoruz.  Çözümü mysql tarafında bulmamız lazım.
Cevapla
#6
(21-12-2017, Saat: 23:03)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(21-12-2017, Saat: 22:48)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Bu şekilde dener misin?
select LOWER( CONVERT(VARCHAR(32), HashBytes('MD5', N'basarı'), 2))

Cevabınız için teşekkürler fakat md5 hash lenmiş data Mssql tarafında üretiliyor ve Mysql tarafına çekiyoruz. Hashlenen bu veriyi bizde mysql tarafında kullanıyoruz.  Çözümü mysql tarafında bulmamız lazım.

Merhaba, 

Küçük büyük harf duyarlılığından kaynaklanabilir md5 dönüşümünün beklendiği gibi olmaması. İki tarafta da büyük harfe ya da küçük çevirip kontrol eder misiniz ?
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#7
(22-12-2017, Saat: 00:51)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(21-12-2017, Saat: 23:03)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Cevabınız için teşekkürler fakat md5 hash lenmiş data Mssql tarafında üretiliyor ve Mysql tarafına çekiyoruz. Hashlenen bu veriyi bizde mysql tarafında kullanıyoruz.  Çözümü mysql tarafında bulmamız lazım.

Merhaba, 

Küçük büyük harf duyarlılığından kaynaklanabilir md5 dönüşümünün beklendiği gibi olmaması. İki tarafta da büyük harfe ya da küçük çevirip kontrol eder misiniz ?

Teşekkürler mad85

Fakat md5 e giren veriler aynı.  Yukarıdaki örnekde "basarı" kullanıldı ve aradaki fark gösterildi. Md5 ile hashlenmiş verileri okuma iznimizin olduğu bir sistemden çekiyoruz. MsSQL kullan bir sistem de bu değer üretiliyor, bu değeri kendi sistemlerinde de kullanıyorlar bizim tarafdada kullanılıyor.

Mysql tarafında
char set : latin5 -- ISO 8859-9 Turkish
collation: latin5_turkish_ci

şeklinde test database oluşturark deneme yapınca aynı sonuçları elde ettim. Problem charset ve collation dan kaynaklandığı kesinlik kazanmış oldu. Mevcut Mysql database charsetini ve collation yapısını değiştirmenin, mysqli kullanan uygulamalar tarafında ne gibi sonuçlar üreteceğini kestiremiyorum. Md5 verisini SP içerisinde kullanıyoruz. Onun için SP içerisinde bir çözüm üretmek en sorunsuz çözüm gibi görünüyor.

Bulduğum çözümü sizlerle paylaşayım.
Bir önceki mesajı yazdıkdan sonra ufak bir şimşek çaktı ve aşağıdaki gibi bir değişiklik yaptım.

CREATE DEFINER=`xxxx`@`%` PROCEDURE `SP_xxxx`(
  IN xxxx VARCHAR(20),
  IN IN_DATA_MD5 VARCHAR(50)  CHARSET latin5 COLLATE latin5_turkish_ci -- <-- SP giriş parametresinde charset ayarlanıyor
)

....

Select md5(IN_DATA_MD5);

...

Md5 haslemeye alacağımız değeri içeren değişkenin charset tanımlaması SP nin giriş parametrelerinin orada tanımlanması gerekiyor.

Dünden beri SP içerinde veriyi işleyip sonuca ulaşmaya çalışyordum. Çözüm umduğumdan basit oldu Smile

İlgilenen herkese teşekkürler
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] SQLite'dan MySQL'e Aktarma ? Mr.Developer 3 320 22-07-2019, Saat: 20:31
Son Yorum: Mr.Developer
  (ÇÖZÜLDÜ] MySQL Date_format komutu wiseman 1 273 30-05-2019, Saat: 11:30
Son Yorum: wiseman
  MySQL Drop database Yetkisi yhackup 2 477 22-03-2019, Saat: 11:21
Son Yorum: yhackup
  MySQL Workbench Kod Tamamlama Hatası - (Code Completion) hi_selamlar 0 345 23-02-2019, Saat: 11:42
Son Yorum: hi_selamlar
  MySQL malformed trail byte or out of range char yhackup 5 705 31-01-2019, Saat: 09:55
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi