Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah ada cara untuk memasukkan nilai besar dalam DB mysql tanpa mengubah max_allowed_packet?

Saya baru-baru ini menemukan masalah ini. Dalam kasus saya, max_allowed_packet server adalah 1 MB dan saya tidak dapat melakukan apa pun untuk mengubahnya. Dan saya memasukkan beberapa data tepat di atas 1 MB. Saya menemukan dua kandidat solusi.

1) Pertama, menggunakan JDBC. Sejak MySQL Connector/J v3.1.9 , ada beberapa parameter yang dapat Anda atur, inilah set parameter saya di URL JDBC:

Tambahkan ini:

blobSendChunkSize=50000&useServerPrepStmts=true&emulateUnsupportedPstmts=false&maxAllowedPacket=20000000

Menghasilkan URL JDBC:

jdbc:mysql://serverip:3306/databasename?noDatetimeStringSync=true&blobSendChunkSize=50000&useServerPrepStmts=true&emulateUnsupportedPstmts=false&maxAllowedPacket=20000000

Maka Anda harus menggunakan PreparedStatement untuk melakukan penyisipan, dan gunakan InputStream untuk meneruskan konten byte sebagai parameter ke setObject . Perhatikan bahwa setObject menggunakan array byte tidak akan mengaktifkan pemisahan gumpalan. Kombinasi parameter, server MySQL terbaru (5.0.45 atau lebih baru), dan InputStream akan mengirimkan data blob menggunakan LONG DATA mekanisme, membelah gumpalan menurut blobSendChunkSize .

Solusi JDBC berfungsi dan saya telah mengujinya.

2) Sekarang, kandidat kedua, adalah menggunakan mysqli PHP driver dan gunakan mysqli_send_long_data . Untuk kenyamanan Anda, salin dari contoh manual PHP :

<?php
$stmt = $mysqli->prepare("INSERT INTO messages (message) VALUES (?)");
$null = NULL;
$stmt->bind_param("b", $null);
$fp = fopen("messages.txt", "r");
while (!feof($fp)) {
    $stmt->send_long_data(0, fread($fp, 8192));
}
fclose($fp);
$stmt->execute();
?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_connect VS mysql_pconnect

  2. Menggunakan kueri MySQL untuk melintasi baris untuk membuat pohon rekursif

  3. JSON_SET() – Masukkan atau Perbarui Nilai dalam Dokumen JSON di MySQL

  4. Bagaimana saya bisa menghapus layar di konsol MySQL?

  5. Kiri bergabung, jumlahkan dan hitung grup menurut