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

Tại sao sử dụng bin2hex khi chèn dữ liệu nhị phân từ PHP vào MySQL?

Điều này nghe có vẻ như một huyền thoại đô thị đối với tôi.

bin2hex() ánh xạ từng byte trong đầu vào thành hai byte trong đầu ra ('a' -> '61' ), vì vậy bạn sẽ nhận thấy sự gia tăng bộ nhớ đáng kể của tập lệnh thực hiện truy vấn - tập lệnh sẽ sử dụng ít nhất nhiều bộ nhớ hơn độ dài byte của dữ liệu nhị phân sẽ được chèn vào.

Hơn nữa, điều này ngụ ý rằng đang chạy bin2hex() trên một chuỗi dài mất nhiều lâu hơn so với việc chạy chuỗi mysql_real_escape string() , mà - như được giải thích trong tài liệu của MySQL - chỉ thoát 6 ký tự:NULL , \r , \n , \ , , và 'Control-Z'.

Đó là đối với phần PHP, bây giờ là đối với MySQL:Máy chủ cần thực hiện thao tác ngược lại để lưu trữ dữ liệu một cách chính xác. Việc đảo ngược một trong hai hàm mất nhiều thời gian như thao tác ban đầu - hàm ngược của mysql_real_escape_string() cần thay thế các giá trị thoát (\\ ) với những cái không thoát (\ ), ngược lại của bin2hex() sẽ cần phải thay thế từng và từng bộ byte với một byte mới.

Kể từ khi gọi mysql_real_escape_string() trên dữ liệu nhị phân là an toàn (theo tài liệu của MySQL và PHP hoặc ngay cả khi chỉ xem xét rằng hoạt động không thực hiện bất kỳ chuyển đổi nào khác với những chuyển đổi được liệt kê ở trên), sẽ hoàn toàn không có ý nghĩa nếu thực hiện một hoạt động tốn kém như vậy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo khóa chính tổng hợp đúng cách - MYSQL

  2. Làm cách nào để lập chỉ mục một bảng liên kết cho kết nối nhiều-nhiều trong MySQL?

  3. PDO-MySQL:Giá trị Boolean được chuyển đổi thành 1 hoặc chuỗi trống trên liên kết câu lệnh đã chuẩn bị

  4. Vấn đề với việc thêm hàng với JDBC và MySQL?

  5. Cách hoạt động của toán tử SOUNDS LIKE trong MySQL