Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

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 Giriş yap veya Üye Olselect 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 Giriş yap veya Üye OlBu ş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 Giriş yap veya Üye Ol
(21-12-2017, Saat: 22:48)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu ş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 ?
Cevapla
#7
(22-12-2017, Saat: 00:51)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(21-12-2017, Saat: 23:03)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlCevabı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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MySQL vs MariaDB. Hangisi tercih edilmeli? uparlayan 4 490 18-06-2018, Saat: 15:14
Son Yorum: vkamadan
  MySQL - SQL Tablo Kontrolü Halil Han Badem 3 302 26-05-2018, Saat: 13:11
Son Yorum: Halil Han Badem
  Soru : MySQL Veritabanı' nda Explode İşlemi Nasıl Yapılır mad85 9 708 22-03-2018, Saat: 21:48
Son Yorum: uparlayan
  MySQL SP recover.. mcuyan 6 512 06-01-2018, Saat: 17:07
Son Yorum: mcuyan
  MySQL & DLL (User Defined Function) yhackup 11 901 13-12-2017, Saat: 14:09
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi