Tôi đang cố gắng xuất cơ sở dữ liệu MySQL rất lớn của chúng tôi (1.6GB - chủ yếu là BLOB) và nhập vào máy chủ mới. Tôi đã làm việc thông qua hầu hết các vấn đề và cuối cùng đã hoàn thành việc nhập khẩu mà không có bất kỳ lỗi nào. Sử dụng MySQL Query Browser Tôi chạy một truy vấn trên một bảng với các hình ảnh BLOB và lưu một đĩa vào đĩa (sử dụng biểu tượng lưu trong trình duyệt truy vấn). Khi tôi cố gắng mở tệp, tôi đã nhận được lỗi "định dạng hình ảnh không hợp lệ". Uh oh.Dữ liệu blob được xuất khác với dữ liệu DB
Sử dụng trình duyệt truy vấn Tôi đã kiểm tra giá trị trên cơ sở dữ liệu nguồn và cơ sở dữ liệu mới được nhập gần đây. Các giá trị khác nhau, tôi nghĩ vậy. Nó chỉ có thể là vấn đề mã hóa hoặc một cái gì đó. Đây là những gì tôi thấy:
Nguồn (dữ liệu hợp lệ) server:
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
00 60 00 00 FF DB 00 43 00 08 06 06 07 06 05 08
and so on...
máy chủ mới:
C3 BF C3 98 C3 BF C3 A0 00 10 4A 46 49 46 00 01
01 01 00 60 00 60 00 00 C3 BF C3 9B 00 43 00 08
and so on...
Trong ví dụ này, nó dường như mắt người mới của tôi rằng có 3 byte thêm dữ liệu ở phía trước dữ liệu trên máy chủ "mới".
Sau đó, tôi đã xem tệp kết xuất sql bằng cách sử dụng 010 editor. Tôi đã tìm thấy dòng cho ví dụ cụ thể này và dưới đây là những gì tôi thấy:
FF D8 FF E0 5C 30 10 4A 46 49 46 5C 30 01 01 01
5C 30 60 5C 30 60 5C 30 5C 30 FF DB 5C 30 43 5C
30 08 06 06 07 06 05 08 and so on...
Bây giờ tôi đã vượt qua đầu của tôi. Tôi thấy mẫu, tôi nhận thấy rằng cặp HEX 5C 30 có vẻ giống như 00 nhưng tôi không hiểu TẠI SAO. Tại thời điểm này, tôi có một máy chủ nguồn sắp bị xóa và một máy chủ mới mà tôi sợ đã nhập dữ liệu bị hỏng vào nó. Tôi hy vọng đây là một số loại vấn đề mã hóa có thể được giải quyết bằng cách thiết lập một biến toàn cầu trong MySQL nhưng tôi thực sự không biết.
Tôi cũng nên đề cập rằng khi tôi lưu tệp từ máy chủ nguồn (đang hoạt động) và máy chủ (hỏng) mới, kích thước tệp lớn hơn khoảng 40% cho tệp bị hỏng.
Tôi đã kiểm tra các biến bộ ký tự trên cả hai máy chủ:
SHOW VARIABLES LIKE '%char%'
nguồn server:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
mới server:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
Họ đều giống nhau.
FYI 1,6 Gb chỉ là một đứa trẻ về cơ sở dữ liệu! – briantyler
Chuỗi hex '5C 30' là' \ 0', do đó trông giống như một số hành vi lạ hoặc với trình soạn thảo hoặc nội dung của kết xuất SQL đã bị thao tác/hỏng bằng cách nào đó. – cmbuckley