Ich arbeite an einem Tool, das SQL für eine MySQL-Datenbank generiert und ausführt. Ich versuche, die Möglichkeit hinzuzufügen, die Größe einer Einfügeanweisung basierend auf einer benutzerdefinierten Einstellung zu begrenzen. Ich habe einige Informationen über die Einstellung max_allowed_packet
gefunden, aber ich habe nichts gefunden, was erklärt, wie man die Größe eines Pakets berechnet. Die MySQL-Dokumentation sagt, dass "Ein Kommunikationspaket eine einzelne SQL-Anweisung ist, die an den MySQL-Server gesendet wird", aber ich verstehe nicht, wie die Größe der SQL-Anweisung bestimmt wird.Berechnung der Größe einer MySQL-Anweisung (nicht der Abfrageergebnisse)
ich vorbei eine SQL-Anweisung und einige Parameter zu meinem Fahrer:
cmd.CommandText= "INSERT INTO myTable VALUES(@int, @date, @text)";
cmd.Parameters.AddWithValue("@int", 1);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
cmd.Parameters.AddWithValue("@text", "how big is this???");
cmd.ExecuteNonQuery();
Ist die Größe des Pakets nur die Summe der Bytes im String-Darstellung aller Variablen und die SQL-Anweisung ? Oder sollte ich die Größe jedes Parameters auf der Basis herausfinden, wie viel Platz er in der Datenbank einnehmen würde und wie groß er mit den Bytes in der SQL-Zeichenkette sein würde? Oder etwas anderes? Ich bin nicht wirklich sicher, wie Datenbanktreiber funktionieren, also wäre vielleicht ein Kontext hilfreich, wenn Sie etwas darüber wissen.
Aus Scher-Neugier, warum möchten Sie die Größe einer Insert-Anweisung begrenzen? –
Ich habe das Limit für max_packet_allowed ein paar Mal erreicht, und ich möchte diese Einstellung nicht nur für einige Randfälle in der App ändern. –