Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có cách nào để chèn một giá trị lớn vào DB mysql mà không thay đổi max_allowed_packet không?

Gần đây tôi đã tình cờ gặp vấn đề này. Trong trường hợp của tôi, max_allowed_packet của máy chủ là 1 MB và tôi không thể làm gì để thay đổi nó. Và tôi đã chèn một số dữ liệu chỉ trên 1 MB. Tôi đã tìm thấy hai ứng cử viên giải pháp.

1) Đầu tiên, sử dụng JDBC.Since MySQL Connector / J v3.1.9 , có một số tham số mà bạn có thể đặt, đây là tập hợp các tham số của tôi trong URL JDBC:

Nối những cái này:

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

Dẫn đến URL JDBC:

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

Sau đó, bạn phải sử dụng PreparedStatement để thực hiện các thao tác chèn của bạn và sử dụng InputStream để chuyển nội dung byte làm tham số cho setObject . Lưu ý rằng setObject sử dụng mảng byte sẽ không cho phép tách các đốm màu. Sự kết hợp của các tham số, máy chủ MySQL gần đây (5.0.45 trở lên) và InputStream sẽ gửi dữ liệu blob bằng LONG DATA cơ chế, tách blob theo blobSendChunkSize .

Giải pháp JDBC hoạt động và tôi đã thử nghiệm nó.

2) Bây giờ, ứng cử viên thứ hai, là sử dụng mysqli của PHP trình điều khiển và sử dụng mysqli_send_long_data . Để thuận tiện cho bạn, hãy sao chép từ ví dụ thủ công 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. Truy vấn Mysql với biến mysql không hoạt động trong Zend Framework 1

  2. XAMPP Chạy rất chậm với PHP / MySQL

  3. Menu đệ quy phân cấp với PHP / MySQL

  4. Không thể truy xuất siêu dữ liệu

  5. tải tệp lên MySql DB bằng PHP