2013-01-01 14 views
5

Jeśli dodaję ; do mojej kwerendy MySQL, czy to się liczy do długości max_allowed_packet? A co z dodawaniem spacji? Czy to się liczy? Czy MySQL automatycznie dodaje numer ;, jeśli go nie ma?Co robi aplikacja max_allowed_packet?

tj.

są następujące samo w jakim max_allowed_packet długości dotyczy ?:

INSERT INTO table_name (col_name) VALUES (1) , (2); 
INSERT INTO table_name (col_name) VALUES (1),(2) 

Jeśli są one takie same jak mogę programowo wiedzieć jak długo MySQL uważa zapytanie być?

+1

Krótkim testem, który można wykonać, jest na przykład obniżenie limitu do 1K i utworzenie zapytania większego niż to. W zapytaniu po, dodaj spacje lub;, w logu MySQL będziesz miał bieżący rozmiar pakietu. –

Odpowiedz

0

Nie, białe znaki nie mają znaczenia dla max_allowed_packet, która jest zmienną serwera. Ponieważ możesz sprawdzić klienta MySQL na komputerze, konwertuje otrzymany ciąg na odpowiedni typ danych, usuwając tym samym dodatkowe niepotrzebne białe znaki, podobnie jak złącze MySQL.

Czyli zarówno Zapytania są traktowane jako samego

więc należy po prostu być zaniepokojony czytelność zapytaniu SQL i zapomnieć spacje.

Aby sprawdzić

  • użyciu Wireshark, przechwytywanie pakietów MySQL.

  • Jeśli interesuje Cię nurkowanie głębokie. Przejdź przez kod źródłowy dla klienta MySQL lub konektora MySQL, z którego korzystasz.

0

Maksymalna długość instrukcji SQL, która ma zostać wykonana po jej otrzymaniu i przetworzeniu przez serwer, jest określona na max_allowed_packet; która obejmuje, na przykład, utworzenie listy wartości insertów (jeśli istnieją). Więc do tego czasu nie ma żadnych spacji i tego typu rzeczy. Nie jestem pewien co do ";", ale domyślam się, że jeśli nie jest obecny, jest dodawany przy wstępnym przetwarzaniu wyciągu.