"MQL5'ten (MQL4) MySQL Veritabanına Nasıl Erişilir" makalesi için tartışma - sayfa 29

 
Viktor Vasilyuk #:

Açıklama için teşekkürler. Her şeyi bilemem, bu yüzden soruyorum.

Kendim için çözümü burada buldum.

Not: SELECT için kontrol edildi - çalışıyor

Sorgu sonucunun dönüştürülmesine izin verilir, ancak tablo düzeyinde utf8mb4 tanımına sahip olduğunuzu unutmayın, yani tüm alanlar için varsayılan olarak varchar kullanılacaktır ve sorguda bir metin alanı için bir koşulunuz varsa, MySQL dolaylı olarak dönüştürmeye çalışacaktır. Ve bir metin sütunu üzerinde bir dizin oluşturmuş olabileceğinizi hesaba katarsanız, iyileştirici böyle bir dönüştürme sırasında bunu algılamayabilir... dolayısıyla sorgu performansıyla ilgili sorunlar ortaya çıkabilir.
Bu nedenle, bu tür şeylerin hem tablo düzeyinde hem de sütun tanımı düzeyinde kontrol edilmesi arzu edilir.
 
Eugeniy Lugovoy #:
Sorgu sonucu dönüştürmeye izin verilir, ancak tablo düzeyinde utf8mb4 tanımına sahip olduğunuzu unutmayın, yani tüm alanlar için varsayılan olarak varchar kullanılacaktır ve sorgunuzda bir metin alanı üzerinde bir koşulunuz varsa, MySQL bunu dolaylı olarak dönüştürmeye çalışacaktır. Ve bir metin sütunu üzerinde bir dizin oluşturmuş olabileceğinizi hesaba katarsanız, optimize edici böyle bir dönüştürme sırasında bunu algılamayabilir... dolayısıyla sorgu performansıyla ilgili sorunlar ortaya çıkabilir.
Bu nedenle, bu tür şeylerin hem tablo düzeyinde hem de sütun tanımı düzeyinde kontrol edilmesi arzu edilir.

bir açıklama alanı var. "Yorumlar" gibi bir şey, alan gerekli değil, sadece bir metin açıklaması. Dizin olmayacaktır.

MySQL utf8mb4 varsayılan olarak yapar. Bir dahaki sefere DDL'de nasıl belirteceğimi söyleyebilir misiniz? Neyi değiştirmeli ve hangi kodlamaya

 
Meraktan soruyorum, MQLmySQL veritabanı türleri konusunda seçici mi? Yeni bir veritabanına geçene kadar komut dosyamızın veritabanına bağlandığı bir sorunla karşılaşıyoruz. Aniden okuma / yazma / silme ile ilgili sorunlar yaşıyoruz. 3306 numaralı bağlantı noktası için tüm izinler etkinleştirildi ve yeni db eskisinin bir kopyası.

Herhangi bir fikriniz var mı?
 
Boaz Nyagaka Moses #:
Bu hatayı almaya devam ediyorum:
2022.03.02 20:22:25.198 MySQL-001 EURUSD,M15: Bağlantı hatası #2059 Kimlik doğrulama eklentisi 'caching_sha2_password' yüklenemiyor: Belirtilen modül bulunamadı.

Bunu çözmeyi başarabildin mi Boaz?

 

MySqlCursorFetchRow'dan sonra alınabilecek Alan sayısını bilmenin herhangi bir yolu var mı?

Belki RowFieldsSize gibi gizli bir fonksiyon ...


Anladığım kadarıyla, Alan yoksa, MySqlGetFieldAsString boş döndürüyor. Ancak String Field özellikle boş bir alan içeriyorsa da boş döndürüyor. Yani, Alanların sayısını kaba kuvvetle takip etmek her zaman mümkün değildir.


Koltuk değneği olarak önce sql komutu ile öğrenebilir, ancak daha sonra tekrar seçebilirsiniz, ancak bu zaten gereksiz bir Select.



Lütfen kütüphaneyi geliştirin, çok faydalı bir şey. Tabii ki uzun zaman önce birkaç mysql mt içine inşa etmek

 

Ekle ve Güncelle sorgusu - yalnızca 16 kb sorgu sınırı mı?


Sorgu 16.000 karakterden fazlaysa, metatrader çöküyor (kapanıyor). daha azsa, sorun değil.

Örnek olarak 32.000 karakter için bir UPDATE ekliyorum.


Veritabanında güncelleme alanı - LONGTEXT

Dosyalar:
test2.txt  64 kb
 
andreysneg #:

Insert ve Update sorgusu - sadece 16kb sorgu sınırı ?


Sorgu 16.000 karakterden fazlaysa, metatrader çöküyor (kapanıyor). daha azsa, sorun yok.

UPDATE'in 32.000 karakter için bir örneğini ekliyorum.


Veritabanında güncelleme için alan - LONGTEXT

Bu daha çok MQL'deki satır boyutu sınırı gibidir :-(

ve daha derli toplu yazabilirsiniz :

REPLACE d1 ("t", "o", "h", "l", "c") VALUES (time1,open1,high1,low1,close1), (time2,open2,high2,low2,close2) ....

ve/veya tek bir işlemde birleştirerek iki sorguya bölme

 
Merhaba! Uzmanlar için soru - MySQL'den MT5'e ne kadar veri ve ne sıklıkla okuyabilirim?
Örneğin, 50 000 öğe veriye sahibim ve bunları tabloda her 0,1 saniyede bir güncelliyorum (sayılar). MT5 bunları MySQL'den alıp her 0,1 saniyede bir güncelleyebilecek mi? Bu makalede verilen işlevselliğin 1 sorgu başına KB üzerinde herhangi bir sınırlaması var mı?
 
Alex Renko #:
Merhaba! Uzmanlar için soru - MySQL'den MT5'e ne kadar veri ve ne sıklıkla okuyabilirim?
Örneğin, 50 000 öğe verisine sahibim ve bunları tabloda her 0,1 saniyede bir güncelliyorum (sayılar). MT5 bunları MySQL'den alıp her 0,1 saniyede bir güncelleyebilecek mi? Bu makalede KB ile ilgili verilen işlevsellikte 1 sorgu için herhangi bir sınırlama var mı?

Soru kesinlikle ilginç ...

Döndürülen SELECT sorgu satırlarının sayısında herhangi bir sınırlama olmadığını söylemeliyim.

Sorgunun kendisi için boyut sınırı 64 Kb'dir. Dolayısıyla, 50 bin veri satırını güncellemeye çalışıyorsanız, bunları her biri 1000 satır gibi gruplara ayırmak ve böylece 50 sorgu göndermek daha iyidir.

100 ms'lik hıza gelince, veritabanınız bir sunucuda bulunuyorsa ve MQL'i veritabanı bağlantısıyla çalıştırdığınız terminaliniz biraz uzaksa, büyük olasılıkla ping boyutunda ağ gecikmesiyle karşılaşacaksınız....

Örneğin, veritabanı sunucusu ile terminal arasında 60 ms'lik bir ping varsa, sunucudan gelen gerçek yanıt gecikecektir = 60ms (sorgu) + veritabanı tarafında sorgu işleme süresi + 60ms (yanıt).


Bu proje, dinamik mysql kütüphanelerinin işlevselliğine erişmek için sadece basit bir sarmalayıcıdır.

İşlevsellik kümesi, pratik olarak yararlı ana işlevlerle sınırlıdır, genişletebilir, ihtiyacınız olanı ekleyebilir, örneğin eşzamansız sorgular için destek ekleyebilir ve ardından her birinin sırayla yürütülmesini beklemeden 50 sorguyu 1000 satırda gönderebilirsiniz.


Not: Github'da kütüphane kaynaklarını ve önceden ayarlanmış limitleri görebilirsiniz(https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL).

P.P.S.: ayrıca indirebilir, kendi isteğinize göre değiştirebilir, derleyebilir ve test edebilirsiniz.

MQLMySQL-Project/MQLMySQL at master · elugovoy/MQLMySQL-Project
  • elugovoy
  • github.com
MQL & DLL libraries for working with MySQL database - elugovoy/MQLMySQL-Project
 
andreysneg #:

MySqlCursorFetchRow'dan sonra alınabilecek Alan sayısını bilmenin herhangi bir yolu var mı?

Belki RowFieldsSize gibi gizli bir işlev vardır ...


Anladığım kadarıyla, Alan yoksa, MySqlGetFieldAsString boş döndürüyor. Ancak String Field özellikle boş bir alan içeriyorsa da boş döndürür. Yani, Alanların sayısını kaba kuvvetle takip etmek her zaman mümkün değildir.


Bir koltuk değneği olarak önce sql komutu ile öğrenebilir, ancak daha sonra tekrar seçebilirsiniz, ancak bu zaten gereksiz bir Select'tir.



Lütfen kütüphaneyi geliştirin, çok faydalı bir şey. Tabii ki, birkaç mysql uzun zaman önce mt içine yerleştirilmelidir

Hm... ve ne tür sorgular size bu kadar zor geliyor ki, onun tarafından döndürülen alanların sayısını belirlemek gerekiyor?

Genellikle SELECT komutunda yalnızca belirli bir durumda gerekli olanları listeleyin. SELECT * kullanmayın, sadece ihtiyacınız olanı seçin :) bu normal bir uygulamadır.

Koltuk değnekleri yapmamalısınız, Github'dan kaynak kodu alabilir ve mysql_fetch_fields() MySQL API işlevi için bir sarmalayıcı ekleyebilirsiniz