PDA

View Full Version : Vấn đề nhập dữ liệu Unicode trong Oracle từ VB.NET?



thukhoa
29-03-2005, 15:50
Chào các anh chị.
Tôi có vấn đề sau nhờ các anh chị hỗ trợ:
Tôi dùng giao diện VB.NET nhập dữ liệu Unicode (font Tahoma,Arial...) vào Database Oracle NHANVIEN(MA char(10),TEN nvarchar2(40)). Trong Oracle tôi đã thiết lập cho Database characterset là UTF8. Tuy nhiên khi nhập dữ liệu thì vẫn không được, các font Unicode bị thay bằng dấu ?
Khi tôi dùng iSQLPlus nhập dữ liệu thì OK.
Xin mọi người chỉ giáo.
Cám ơn nhiều.

dinhbaochau
29-03-2005, 16:20
Chào bác thukhoa - Cái này tui cũng có gặp rồi, giống như bác vậy, mà cái này củ chuối lắm. Tui cũng có một cách giải quyết tạm thời thôi.
Vấn đề là nằm ở chổ bộ gõ ấy. Mình cũng nghĩ không ra là tại sao, vì chuẩn UTF-8 thì cái nào mà chẳng được, nhưng mình có thử mới biết.
Khi bạn nhập dữ liệu, nếu bạn dùng bộ gõ Vietkey thì chọn unocode dựng sẳn, còn nếu chọn Unikey bản 3.6 thì chọn XUTF-8.
Bác cứ thử xem sao nhé.

thukhoa
30-03-2005, 07:54
Chào bác DinhBaoChau, tôi đã làm theo hướng dẫn của bác và d8ã thực hiện được, tuy nhiên như vậy thì lúc người dùng nhập giao diện tiếng Việt thì lại ra mã.
Ví dụ: "Bửu Điền" thì khi nhập trong giao diện chương trình thì lại là "Bá»­u Điền như vậy là không được rồi.
Còn cách nào khác không nhỉ?
À để tôi thử VietKey xem sao.
Cám ơn bác Dinhbaochau nhiều nghen.
ThuKhoa

dinhbaochau
30-03-2005, 07:59
Cái này bác dùng VietKey và chọn unicode dựng sẳn là gõ được ngay mà. Bác thử xem sao nhé.

thukhoa
30-03-2005, 08:11
Bác Dinhbaochau à,
Tôi đã dùng thử VietKey2K chọn bảng mã Unicode dựng sẵn nhưng không được bác à. Font Unicode trong Oracle vẫn vậy, nếu dùng Unicode1 UTF8 thì mới được.
ThuKhoa

dinhbaochau
30-03-2005, 08:26
Vậy thì vấn đề được giải quyết rồi còn gì! Có phải đúng như tui nói là nằm ở bộ gỏ ấy, chọn mã đúng, và thằng nào "hạp" thì xài thằng đó. Chúc bác thành công

ti_sun
30-03-2005, 18:38
Nếu bạn nhập dữ liệu bằng font Unicode dựng sẵn (giao diện VB.NET: nhớ chọn font trong các controls cho đúng nhé, save form ... as ... -> chọn Save with Encoding : unicode UTF8 gì gì đó với chuẩn 65001).
Nếu bạn nhập vào và hiển thị trên giao diện VB.NET đúng font thì OK rồi, còn bạn dùng sqlplus hoặc các công cụ hỗ trợ cho Oracle để hiển thị thì không đúng do giao diện của hắn không hỗ trợ Uni.

thukhoa
31-03-2005, 09:45
Bác lkn à
Đầu tiên cũng cám ơn bác về các control VB6 mà bác share cho anh em.
Nhưng đối với vấn đề Unicode thì theo tôi .NET là good. Tôi viết chương trình với Database là SQL Server thì Unicode OK, nhưng không hiểu thằng Oracle này nó làm sao đó, hay là mình học chưa tới nhỉ.
Kiến thức là đại dương mà.
ThuKhoa

thukhoa
13-04-2005, 10:07
Chào mọi người
Sau 1 thời gian ngâm cứu thì tôi đã hiểu ra được vấn đề như sau:
Trong Oracle chỉ support Unicode theo bảng mã UTF8 mà không support UTF16(UCS2).
UTF8 và UTF16 đều là Unicode nhưng mã hóa khác nhau.
Mặc dù trong giao diện nhập .NET chúng ta save encoding UTF8 nhưng khi dùng ADO.NET thì lại convert sang UTF16. Vì vậy khi lưu trong Oracle thì không phải là định dạng UTF8.
Vì vậy tôi đã viết 1 class để chuyển đổi giữa 2 bảng mã trên.
Các anh chị nào gặp vấn đề này thì có thể để lại email và tôi sẽ gởi cho các anh chị.
Thân chào

lucky_lucke
04-05-2005, 14:19
Lúc tạo database, Oracle cho chọn 2 dạng characterset:

- Database Charaterset (loại dữ liệu char, varchar2,...)
- National Characterset (loại dữ liệu nchar, nvarchar2,...)

Database Charaterset chỉ hỗ trợ varying-width characterset (UTF8...) ko hỗ trợ fixed-width characterset (AL16UTF16)

National Characterset chỉ có thể là 1 trong 2 giá trị : UTF8 hoặc AL16UTF16

bro thukhoa chọn kiểu dữ liệu cho column TEN là nvarchar nên Oracle sẽ encode character dựa trên giá trị của tham số National Characterset.

bro connect database as sysdba rồi select * from v$nls_parameters
-> xem NLS_CHARACTERSET có giá trị gì ?
-> xem NLS_NCHAR_CHARACTERSET có giá trị gì ?

bro post kết quả lên nha.

thukhoa
06-05-2005, 08:47
Kết quả như sau:
NLS_CHARACTERSET:UTF8
NLS_NCHAR_CHARACTERSET:UTF8

Nhưng trước đó tôi đã thử
NLS_CHARACTERSET:AL16UTF16
NLS_NCHAR_CHARACTERSET:AL16UTF16
Nhưng vẫn không được.
Bạn có cao kiến gì không?

phong_ld
09-05-2005, 15:02
Lucky nói đúng đó
NLS_CHARACTERSETkhông hỗ trợ AL16UTF16
chỉ có NLS_NCHAR_CHARACTERSET là có thể dùng AL16UTF16
Tức là với các kiểu dữ liệu NCHAR và NVARCHAR2 được mã hóa độ dài cố định 16 bit.
Phù hợp với kiểu dữ liệu unicode của Java và .NET

Cyber
11-05-2005, 11:30
Thử làm theo cách này xem.

Vào Regedit HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE
Tìm xem có cái NLS_LANG thì chage value thành VIETNAMESE_VIETNAM.UTF8

Loại data của parameter truyền qua Store là OracleType.VarChar vẫn chạy được Unicode ầm ầm

pnthach
14-05-2005, 07:32
Cho em hỏi 1 vấn đề Tiếng Việt Unicode trong Oracle.

Oracle em dùng là 9i (9.2.0.1). Em cài Character Set là AL32UTF8 và National Character Set la AL16UTF16. Khi em dùng SQL WorkSheet để Insert thì em gõ được Tiếng Việt bằng font UNICODE. Nhưng khi dùng câu lệnh Select hiển thị ra thì không đúng Tiếng Việt. Điều này cũng tương tự như dùng giao diện ASP.NET. Em dùng bộ gõ UNikey và VietKey2000,bảng mã tương ứng là Unicode và Unicode dựng sẵn.
Ví dụ:
Em Insert:
insert into USERS values('013427','Nguyễn Tuấn Anh'); ---> vẫn thấy Tiếng Việt ở tên Username
Em Select:
Select * from USERS;
Kết quả:
013427 Nguy?n Tu?n Anh -----> không thấy Tiếng Việt nữa

Vậy vấn đề là sao anh và giải quyết như thế nào?

Cảm ơn anh nhiều.

phong_ld
16-05-2005, 08:05
Lỗi này thường là do sử dụng charset không đúng.
Bạn phải kiểm tra lại charset sử dụng ở client: NLS_LANG
Nếu client của bạn hỗ trợ hoàn toàn unicode thì có thể set là UTF8.
Nhưng thường thì các client tool của oracle không hỗ trợ unicode ngoại trừ iSqlPlus.
Đối với các tool của Oracle không hỗ trợ unicode thì có thể đặt charset ở client là VN8VN3, khi đó nhập liệu bằng mã TCVN3, dữ liệu này được oracle tự động chuyển sang mã UTF8 khi gửi lên server, và ngược lại.

Nobboo
29-06-2005, 16:06
có 1 cách làm gọn hơn là khi thiết lập Connection toi Oracle (sử dung OracleConnection), thì thêm thuộc tính "Unicode=True", đây là thuộc tính ẩn, search trong MSDN sẽ có, mình đã từng thử và thành công với 10g, 9i trước đây các bạn dùng thử

nganminh
01-08-2005, 14:47
Trời đất, insert into USERS values('013427',N'Nguyễn Tuấn Anh');

ngocthom96
12-03-2008, 17:07
chao ban thukhoa!
Mình chỉ mới sài oracle, mình cũng đang bị bí cái vụ gõ tiếng Việt vào ASP.net nhưng load lại thì không đọc được.
Vậy bạn vui long gửi giúp mình class chuyển đổi mã qua email ngocthom96@yahoo.com.
Cám ơn bạn nhiều nhé!

tuanpq
25-11-2008, 18:58
Trời đất, insert into USERS values('013427',N'Nguyễn Tuấn Anh');

Oracle mà N gì ở đây !!!

ti_sun
06-12-2008, 12:13
Oracle mà N gì ở đây !!!

Nếu bạn dùng câu lệnh trực tiếp từ ASP.NET thì phải có N'...' chứ !

tuankinhte38
08-12-2008, 15:47
Chào các bạn.

Vấn đề Unicode trong VB.net và oracle là vấn đề mà nhiều người mắc phải.
Có việc bận nên có 02 cái bạn nên quan tâm:
01. Khi lập trình form VB.net bạn phải save as ở định dạng Unicode.
02. Khi tạo Database chú ý thiết lập đúng Character Set.

Nếu bạn làm đúng 2 cái này đảm bảo ngon 100%

Chú ý: N chỉ dùng đối với SQL Server không dung đối với Oracle

thanhtru2111
24-01-2010, 09:30
Xin chào các bác
lỗi các bác vừa nêu ở trên hầu hết là không giải quyết được là vì oracle từ 10g trở về trước không hỗ trợ, nhưng nếu các bác sử dụng phiên bản 11g thì sẽ hiển thị bình thường thôi