Tôi đang sử dụng Sql Server 2008 R2 Enterprise. Tôi đang viết mã một ứng dụng có khả năng chèn, cập nhật, xóa và chọn các bản ghi từ một bảng Sql. Ứng dụng đang tạo ra lỗi khi nói đến các bản ghi chứa các ký tự đặc biệt chẳng hạn như ć, č š, đ và ž.Ký tự Unicode trong bảng Sql
Đây là những gì sẽ xảy ra:
Lệnh:
INSERT INTO Account (Name, Person)
VALUES ('Boris Borenović', 'True')
WHERE Id = '1'
chèn một kỷ lục mới nhưng trường Name là Boris Borenovic
, vì vậy nhân vật ć
được thay đổi để c
.
Lệnh:
SELECT * FROM Account
WHERE Name = 'Boris Borenović'
trả về bản ghi đúng, vì vậy một lần nữa nhân vật ć
được thay thế bằng c
và kỷ lục được trả về.
Câu hỏi:
- Có thể làm cho Sql Server lưu ký tự đặc biệt
ć
và khác đề cập trước đó? - Vẫn có thể, nếu câu hỏi trước được giải quyết, để Sql có thể trả về bản ghi
Boris Borenović
ngay cả khi truy vấn yêu cầuBoris Borenovic
?
Vì vậy, khi lưu hồ sơ Tôi muốn Sql để lưu chính xác những gì được đưa ra, nhưng khi lấy các hồ sơ, tôi muốn nó để có thể ingnore các ký tự đặc biệt. Cảm ơn vì sự giúp đỡ.
Cảm ơn câu trả lời của bạn. Tên trường trong bảng Sql của tôi là kiểu nvarchar (50), do đó, vấn đề vẫn giữ nguyên. Đối với các đối chiếu, tôi nghĩ rằng nên giải quyết câu hỏi thứ hai, tuy nhiên, cho đến khi tôi giải quyết 'ć' và các ký tự còn thiếu, tôi bị mắc kẹt. Tôi đã kiểm tra văn bản lệnh Sql của tôi trong mã và nó xuất hiện bình thường (có nghĩa là nó chứa các ký tự pesky). Có thể có bất cứ điều gì khác mà ngăn cản việc tiết kiệm của những nhân vật? Sao câu lệnh SELECT cũng chuyển 'ć' thành' c' (tôi không sử dụng COLLATE)? – Boris
@Boris - như tôi đã nói (điểm 2), nếu bạn có chuỗi ký tự (như trong ví dụ bạn đã đăng), bạn cần đặt dấu "N" trước dấu mở ngoặc, nếu không chuỗi sẽ được chuyển đổi vào một hình thức khác trước khi nó được vào bảng. –
OK, tôi hiểu rồi! Tôi có nên đặt 'N' ở trước mỗi giá trị trường không? – Boris