Trong liên kết bạn cung cấp, liên kết nêu rõ rằng đối với các trường TEXT, " Độ dài tối đa hiệu dụng sẽ nhỏ hơn nếu giá trị chứa các ký tự nhiều byte. "
UTF-8 là một Bộ mã Unicode và là bộ mã mặc định cho cơ sở dữ liệu của bạn. Nó sử dụng các biểu diễn 1 byte cho 128 ký tự đầu tiên, khớp với bộ ASCII và các biểu diễn 4 byte cho các ký tự còn lại.
Điều này có nghĩa là một cột TEXT có thể có nhiều hơn hoặc ít hơn các ký tự được lưu trữ tùy thuộc vào việc các ký tự đó có phải là ASCII hay không.
Bây giờ, vấn đề của bạn xảy ra khi trình điều khiển MySQL không xử lý điều này đúng cách và sẽ giả sử tất cả các ký tự UTF-8 có chiều rộng 4 byte , và sẽ chia Độ dài cột cho 4 byte và chuyển cho DataTable dưới dạng Độ dài trường thực tế. Điều này có nghĩa là về mặt kỹ thuật, có thể có một số văn bản trong cơ sở dữ liệu của bạn không vừa với DataTable, như đã xảy ra trong trường hợp của bạn.
Giải pháp (hoặc cách giải quyết khác trong trường hợp này) cho vấn đề của bạn là chính xác những gì bạn đã làm lúc này, đó là thay đổi cột thành một loại có thể chứa nhiều ký tự hơn, là MEDIUMTEXT hoặc LONGTEXT.
Tôi đoán là quyết định này được đưa ra để đơn giản hóa việc triển khai Trình điều khiển MySQL, nhưng tôi sẽ xem xét việc gửi báo cáo lỗi cho Oracle.