Ikili yazılan bir sütun içeren bir tablo içeren bir MySQL veritabanım var. Bu sütunu, örneğin HEX()
aracılığıyla çalıştırmak zorunda kalmadan yansıtmayı çok isterim. mysql
CLI aracının, konsolumun komik/rahatsız edici şekillerde yorumlanması için isteğe bağlı bayt çıkmayacak şekilde ikili veri gösterimini görüntülemek için bir yapılandırma seçeneği veya başka araçlar var mı? Eğer bir görünüm oluşturmak, çoğunlukla kolaylık için tabloya bakmak istiyorum bu yanamysql CLI aracı ikili veriyi konsol dostu bir şekilde göstermenin bir yolunu sunuyor mu?
cevap
davranışı: Sonra
CREATE OR REPLACE VIEW myview AS
SELECT col1, HEX(col2) AS col2, col3, etc....
FROM table;
, yapmanız gereken tek şey, referans myview
yerine table
olduğunu MySQL komut satırı istemcisinin sonuç kümelerini ikili verilerle görüntülerken bana her zaman bir can sıkıntısı oldu, aslında bu sayfayı buldum çünkü bir kez daha MySQL komut satırı istemcisinden rahatsız oldum (ikili veriyi benim terminime döktüm) nal, ikili UUID sütunları ile bir sonuç kümesine bakarken) ve sorunu çözmek istedim bir kez ve tüm :-) için
Görünümler oluşturma gerçekten benim için bir seçenek değil. ikili UUID sütunları) ve aynı zamanda tüm sütun adlarını yazmak için SELECT *
arasında geçiş yapmak gerçekten rahatsız edici olduğunu buldum (sadece HEX()
bir sütunun değerine uygulanabilir).
Sonunda, bu sıkıntıya alternatif çözümler için ilham veren bir hack hack reklamıyla geldim: Terminal oluşturma için çıktıyı sterilize etmek için özel bir çağrı komutu kullanma. Burada şöyle çalışır:
#!/usr/bin/python
import binascii, string, sys
for line in sys.stdin:
line = line.rstrip()
column, _, value = line.partition(': ')
if any(c not in string.printable for c in value):
sys.stdout.write("%s: %s\n" % (column, binascii.hexlify(value)))
else:
sys.stdout.write("%s\n" % line)
Başlangıç MySQL komut satırı istemcisi aşağıdaki gibi:
$ mysql --pager=/home/peter/binary-filter.py --vertical ...
Aşağıdaki içeriğe sahip bir yürütülebilir (chmod + x) Python komut dosyası oluşturun
Python betiğinin yol adını geçerli olarak değiştirin. Komut dosyasını
$PATH
'a da koyabilirsiniz, bu durumda adı--pager
seçeneğine iletebilirsiniz (MySQL istemcisi için bir çağrı cihazı olarak nasıl kullanacağınız gibi) (less
çağrı cihazını nasıl kullanacağınız gibi).Şimdi ne zaman
SELECT ...
, değerinin içerdiği olmayan basılabilir karakterler tam değer MySQL'ınHEX()
fonksiyonun sonuçlarına benzer onaltılık karakter olarak işlenir böylece yeniden yazılarak bir sütun gösteren herhangi bir satır.
Yasal Uyarı: Bu Python ben gösterdi pasajı örneğin, uzak komple çözümünden (dolayısıyla --vertical
seçenek) SELECT ... \G
biçimi çıkışı beklediğini ve içerecek şekilde kaçınılmazdır yüzden tüm beş dakika için test böcek.
Sorunum, sorunun MySQL komut satırı istemcisinin yanında çözülebildiğini göstermekti, çünkü sorun şu ki!(bu yüzden sunucu tarafı görünümlerini tanımlamak benim için geriye doğru geliyor - sadece bir komut satırı istemcisi daha kullanıcı dostu yapmak için: -P)
Benim için veritabanı boyutu ile ilgili bir sorun yok, bu yüzden iki farklı sütun kullanacağım her tabloda, biri ikili (16), ikincisi ise indeksleme olmadan char (32) olarak. her ikisi de aynı değere sahip olacak. aramam gerektiğinde, ikili sütunu kullanacağım ve okumam gerektiğinde char (32) kullanacağım. Bu senaryoda herhangi bir sorun var mı? Benim için /etc/my.cnf
çalışmalarında
Set MySQL istemci seçenekleri:
[client]
binary-as-hex = true
[mysql]
binary-as-hex = true
- 1. MFC, panoya metin atmanın hızlı bir yolunu sunuyor mu?
- 2. Elixir, bir GenServer sürecinin mevcut durumunu elde etmenin daha kolay bir yolunu sunuyor mu?
- 3. C++ 11, 14 veya 17, yalnızca bir decltype()? Argümanlarını almanın bir yolunu sunuyor mu?
- 4. Takviye mi yoksa Standart Kitaplık dökümün kayıpsız olup olmadığını kontrol etmenin bir yolunu sunuyor mu?
- 5. aracı konsol: nasıl kullanılır?
- 6. ikili operatör tam yolunu içeren bir dosya
- 7. C++ 11, dizeleri anında birleştirmenin daha iyi bir yolunu sunuyor mu?
- 8. Amazon, AWS S3 bucket name öneklerini ayırmanın bir yolunu sunuyor mu?
- 9. Yerel ağlarının dışında bir veriyi kesiyor mu?
- 10. özel VM paketi, uygulanabilir olmayan bir yükleyici programı sunuyor mu?
- 11. Linux, monotonik olarak artan bir saati uygulamalara sunuyor mu?
- 12. MySQL çevrimiçi test aracı
- 13. Büyük yapılandırılmış ikili veriyi Haskell ile depolama
- 14. .NET'te genişletilebilir meta verileri ORM dostu bir şekilde nasıl depolanır?
- 15. MySQL CLI yorumlayıcısında Grep
- 16. Twitter Bootstrap 3.0, bir kaydırma geçişi seçme bileşeni sunuyor mu?
- 17. PHP CLI sürümünde php.ini yolunu nasıl değiştirilir?
- 18. Qt (garantili) hata ayıklama tanımını sunuyor mu?
- 19. PHP-MySQL-MySQL tamsayı alanını nasıl güvenli bir şekilde artırabilirim?
- 20. Bir ikili dosyayı bir vektöre verimli şekilde nasıl okuyacağınız C++
- 21. MySQL İkili günlüğünü etkinleştirme
- 22. NUnit-konsol 2.5.4 çoklu montajları çalıştıramıyor mu?
- 23. MSDeploy "dostu" yeterli mi, yoksa bir MSI dosyasında sarılmış olabilir
- 24. mysqldump, ikili verileri güvenilir şekilde yönetir mi?
- 25. MySQL tetikleyici bir şekilde davranmaya neden oluyor
- 26. Zarif bir şekilde işleme "MySQL gitti"
- 27. Birden çok MySQL kullanıcısını güvenli bir şekilde%
- 28. Yazılı veriyi bir dosyaya nasıl eklersiniz?
- 29. JavaScript ajax çağrısında PHP passthru'dan ikili veriyi nasıl alabilirim?
- 30. MATLAB, ikili dosyalarda neden başarılı bir şekilde okunamıyor?
HEX 'sorununun ne()'? Mükemmel bir çözüm gibi görünüyor. – wallyk
Çünkü gerçekten istediğim tek şey hızlı bir şekilde "SELECT * ..." olması oldukça zor. –