Phỏng đoán thuần túy:
- Tệp là
utf-8
được mã hóa (hoặc bất kỳ mã hóa nào khác, SQL-Server 2008 không thể đọc nguyên bản).- Bạn phải biết rằng SQL-Server khá hạn chế với các mã hóa tệp.
CHAR
(hoặcVARCHAR
) làextended ASCII 1-byte encoding
vàNCHAR
(hoặcNVARCHAR
) làUCS-2 2-byte encoding
(gần giống vớiUTF-16
). - Với SQL-Server 2016 (và SP2 cho v2014), một số hỗ trợ khác đã được giới thiệu, đặc biệt là cho
utf-8
. - Cố gắng mở XML của bạn bằng một trình chỉnh sửa thích hợp (ví dụ:notepad ++) và cố gắng tìm ra mã hóa của tệp. Cố gắng lưu mã này thành "unicode / UCS-2 / utf-16" và thử nhập lại.
- Cố gắng sử dụng tính năng nhập của bạn với
CLOB
thay vìBLOB
. Đọc tệp dưới dạng nhị phân LargeObject sẽ lần lượt lấy các byte. SQL-Server sẽ cố gắng đọc các byte này dưới dạng chuỗi với kích thước cố định cho mỗi ký tự. Một ký tự LOB có thể hoạt động trong những trường hợp đặc biệt. - Kiểm tra hai byte đầu tiên để tìm
BOM
(dấu thứ tự byte)
- Bạn phải biết rằng SQL-Server khá hạn chế với các mã hóa tệp.
- Có một số bụi bẩn trong XML của bạn
- Mở tệp bằng trình chỉnh sửa HEX và cố gắng tìm các mã lạ
- Mã của bạn xử lý nội dung của tệp trong một câu lệnh được tạo động.
- Trong những trường hợp như vậy, đôi khi bạn gặp phải dấu ngoặc kép hoặc ngắt chuỗi
- Gợi ý chung:
- Nếu bạn nhập dữ liệu và gặp sự cố, bạn nên sử dụng phương pháp tiếp cận 2 bước
- Đọc tệp của bạn vào một bảng dàn khoan dung sai (với
NVARCHAR(MAX)
hoặc thậm chíVARBIANRY(MAX)
mục tiêu) và cố gắng tiếp tục với điều này. - Có thể cần sử dụng một công cụ khác để thay đổi tệp của bạn trước khi nhập.