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ı: 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ı: 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ı:
(21-12-2017, Saat: 22:48)barutali Adlı Kullanıcıdan Alıntı: 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 ?
Cevapla
#7
(22-12-2017, Saat: 00:51)mad85 Adlı Kullanıcıdan Alıntı:
(21-12-2017, Saat: 23:03)frmman Adlı Kullanıcıdan Alıntı: 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
  MySQL - Sql-mode only_full_group_by hatası. hi_selamlar 5 1.682 25-12-2022, Saat: 10:43
Son Yorum: hi_selamlar
  MySQL Bağlantı Sorunu - MEB akıllı tahta Frrst 6 1.382 10-11-2022, Saat: 23:16
Son Yorum: mcuyan
  Mysql Farklı bir autoinc mcuyan 11 1.918 09-11-2022, Saat: 23:05
Son Yorum: mcuyan
  Delphi 7 MySql DAC Nasıl Kurulur mahone 1 602 08-10-2022, Saat: 22:09
Son Yorum: mcuyan
  mysql trigger subquery returns more than 1 row hatası cvheneburi 5 1.995 28-08-2022, Saat: 01:04
Son Yorum: cvheneburi



Konuyu Okuyanlar: 1 Ziyaretçi