09/10/2018, 17:48

[Q] cho hỏi về câu query search với từ khoá là Tiếng Việt unicode

Mình có dữ liệu trong database lưu dạng unicode, và bây giờ muốn thực hiện câu query với từ khoá là unicode nhưng nó chạy không tốt.

Câu query của mình là:

rs.open "select * from <table> where Title like '%"&request.form("Key")&"%'"

Nhưng nó query không được vậy???

À trong database dùng unicode mình nên lưu ở dạng font Unicode trực tiếp(vd: "nhiệt độ") hay lưu ở dạng(vd: nhi***7879;t ***273;***7897;) thì tốt hơn?

Xin các bạn chỉ giúp mình với. Thanks
nguyenthu viết 20:05 ngày 09/10/2018
Bạn snoopy,
Bạn hãy dùng câu :
$key = (cho nó giá trị trước)
"select * from Nametable where Title = $key";
Vì SQL không dùng tên Table như biến (trừ trường hợp SQL dynamique, của vài database như DB2), và bạn tránh dùng nhiều hàm trong câu SQL.
Cú pháp like cũng sai, (không cần dùng cho từ khoá) nếu muốn :
like '%***' " nhớ để '%' một đầu thôi, bạn ghép vô trước và sau thì không được.

Thân
White_Rose viết 19:49 ngày 09/10/2018
rs.open "select * from <table> where Title like '%"&request.form("Key")&"%'"
Trong CSDL, bạn nên lưu dạng Unicode trực tiếp.
Trang ASP của bạn thêm dòng sau ở đầu là xong:
<%@CODEPAGE=65001%>
Câu truy vấn trên cũng có thể để là
rs.open "select * from <table> where InStr(1,Title,'" & request.form("Key") & "')>0"
Quên, bạn nên dùng Replace(Request.Form("Key"),"'","''") thay vì Request.Form("Key").
Thân
snoopy viết 19:49 ngày 09/10/2018
Bài viết được gửi bởi nguyenthu
Bạn snoopy,
Bạn hãy dùng câu :
$key = (cho nó giá trị trước)
"select * from Nametable where Title = $key";
Vì SQL không dùng tên Table như biến (trừ trường hợp SQL dynamique, của vài database như DB2), và bạn tránh dùng nhiều hàm trong câu SQL.
Cú pháp like cũng sai, (không cần dùng cho từ khoá) nếu muốn :
like '%***' " nhớ để '%' một đầu thôi, bạn ghép vô trước và sau thì không được.

Thân
có phải bạn đang nói trong php phải ko? Mình thì đang dùng asp đó. Cái cú pháp '%***%' là để mình tìm vd: chử 'a' thì nó sẽ tìm cả từ 'la' và 'an' đó, có phải ko vậy?
nguyenthu viết 20:03 ngày 09/10/2018
Bạn snoopy,
Bạn nên dùng SQL chuẩn, thì câu query nó không tuỳ thuộc ngôn ngữ web (như asp, php... gì cũng vậy thôi), và nó cũng không tùy thuộc nhiều ngôn ngữ khác như VB...
Ðồng ý với bạn là cái cú pháp "like " nó có khác tí dù mình dùng SQL chuẩn, cái này tùy vào ngôn ngữ lập trình. Đó là một trong vài điểm mình thấy có chỗ khác, như format datetime, timestamp...
Nhưng bạn yên tâm, Search bằng Unicode chạy rất tốt, nếu có lỗi thì phần lớn là lỗi trong chương trình, hay trên form mà bạn nạp dữ liệu vào :
1) Trên form, phần <input type=text...., bạn nhớ cho value="", tức là như null (không có khoảng trắng nào cả). Ðối với unicode, thêm một khoảng trắng là đã hư chuỗi dữ liệu rồi, nó sẽ không hiển thị đúng.
2) Bằng unicode, chắc bạn biết một ký tự có thể có một, hai hay ba bytes, vì thế sau khi search xong, bạn hiển thị lại, mà quên set charset="utf-8", là bạn sẽ có thể thấy nhiều ký tự thay vì một.

Còn câu hỏi, cú pháp '%***%' cho với ***='a' thì đúng vậy, nó sẽ cho tùm lum hết : tất cả những chuỗi có chứa 'a'. Nhưng cái nầy là của SQL dùng cho Access.
Còn bạn WhiteRose có chỉ cách :<%@CODEPAGE=65001%> dùng cho ASP thì chắc là không sai đâu, đôi khi các Server cần được chỉ rõ codepage gì.

Tôi đã làm một Web page, login, vào database MySQL, Unicode, chương trình php đã chạy ngon lành. Tôi tin rằng bạn sẽ làm được mà.

Thân
Bài liên quan
0