Để tìm kiếm xem chuỗi có chứa ký tự đặc biệt hay không, bạn có thể sử dụng REGEXP. Sau đây là cú pháp -
select * from yourTableName where yourColumnName REGEXP '[^a-zA-Z0-9]';
Trước tiên chúng ta hãy tạo một bảng -
mysql> create table specialCharactersDemo -> [ -> StudentId varchar[100] -> ]; Query OK, 0 rows affected [0.58 sec]
Chèn bản ghi vào bảng bằng lệnh chèn. Sau đây là truy vấn -
mysql> insert into specialCharactersDemo values['STU_1234']; Query OK, 1 row affected [0.15 sec] mysql> insert into specialCharactersDemo values['STU567']; Query OK, 1 row affected [0.14 sec] mysql> insert into specialCharactersDemo values['STU#1234']; Query OK, 1 row affected [0.13 sec] mysql> insert into specialCharactersDemo values['STU897$']; Query OK, 1 row affected [0.18 sec] mysql> insert into specialCharactersDemo values['STU999']; Query OK, 1 row affected [0.43 sec] mysql> insert into specialCharactersDemo values['STU1010']; Query OK, 1 row affected [0.14 sec
Sau đây là truy vấn để hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select -
mysql> select *from specialCharactersDemo;
Điều này sẽ tạo ra đầu ra sau -
+-----------+ | StudentId | +-----------+ | STU_1234 | | STU567 | | STU#1234 | | STU897$ | | STU999 | | STU1010 | +-----------+ 6 rows in set [0.00 sec]
Đây là truy vấn để tìm kiếm nếu một chuỗi chứa các ký tự đặc biệt -
mysql> select *from specialCharactersDemo -> where StudentId REGEXP '[^a-zA-Z0-9]';
Điều này sẽ tạo ra đầu ra sau -
+-----------+ | StudentId | +-----------+ | STU_1234 | | STU#1234 | | STU897$ | +-----------+ 3 rows in set [0.02 sec]
Bạn có thể sử dụng cú pháp khác cho kết quả trên. Sau đây là truy vấn -
mysql> select *from specialCharactersDemo -> where StudentId REGEXP'[^[:alnum:]]';
Điều này sẽ tạo ra đầu ra sau -
________số 8_______Vấn đề ở đây là unicode có một số vấn đề nên không hỗ trợ 100% được, còn mọi thứ và mọi người hỗ trợ hơi khác một chút. Mặc định thường là ASCII và nếu bạn muốn hỗ trợ unicode
- MỌI THỨ phải hỗ trợ nó bằng mọi cách… Đầu vào, quá trình xử lý và đầu ra, cũng như nguồn và đích
- Trong một số trường hợp, như cài đặt Oracle cũ hơn, môi trường hệ điều hành chứa các phiên bản đó phải được thiết lập đúng
- Trong một số trường hợp, chẳng hạn như một số cài đặt của Microsoft, đôi khi bạn phải sử dụng trang mã chính xác
- Với các ký tự HÌNH ẢNH, đặc biệt nếu chúng là ký tự đầu tiên của microsoft/IBM, tất cả các cược có thể bị tắt và bạn có thể phải giải quyết
Mặc dù vậy, có một điều tốt, đây là unicode, vì vậy nó NÊN có thể thực hiện được
Từ wikipedia…
“Các điểm mã Unicode cho chữ cái là U+0142 cho chữ thường và U+0141 cho chữ hoa. [11] Trong hệ thống sắp chữ LaTeX, Ł và ł có thể được sắp chữ bằng lệnh \L{} và \l{}, tương ứng. Các mã HTML lần lượt là Ł và ł cho Ł và ł. ”
Nhiệm vụ đầu tiên của bạn là chạy quy trình với một vài bản ghi vi phạm ở chế độ xem trước. Kiểm tra mục tiêu [ngay trước trình chuyển đổi trong cửa sổ xem trước]. Nếu đúng, vấn đề là ở trình điều khiển mục tiêu hoặc một số khu vực trung tâm mục tiêu. Kiểm tra nguồn. Nếu nó bị lỗi, vấn đề là do trình điều khiển nguồn hoặc một khu vực trung tâm nguồn nào đó. HỌ thường là thủ phạm. Sau đó, có thể thử các điểm chính ở giữa để tìm một điểm không thành công và làm việc lại từ đó
Ồ, và nếu bạn đang sử dụng phiên bản tiên tri trước ngày 12 [tôi quên phiên bản CHÍNH XÁC năm 12 nơi họ đã sửa nó] và bạn thấy vấn đề là CÓ, thì đó có thể là vấn đề MÔI TRƯỜNG. Bạn sẽ phải sửa môi trường [nó chỉ là một vài cài đặt biến môi trường]
Just a little function which mimics the original mysql_real_escape_string but which doesn't need an active mysql connection. Could be implemented as a static function in a database class. Hope it helps someone.
function mysql_escape_mimic[$inp] {
if[is_array[$inp]]
return array_map[__METHOD__, $inp];
if[!empty[$inp] && is_string[$inp]] {
return str_replace[array['\\', "\0", "\n", "\r", "'", '"', "\x1a"], array['\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'], $inp];
}
return $inp;
}
?>