MySQL Chấp nhận ký tự đặc biệt


Để 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_______

MySQL Chấp nhận ký tự đặc biệt


MySQL Chấp nhận ký tự đặc biệt

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

  1. 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
  2. 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
  3. 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
  4. 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;
}
?>

Những ký tự đặc biệt nào không được phép trong MySQL?

ASCII NUL (U+0000) và các ký tự bổ sung (U+10000 trở lên) không được phép trong số nhận dạng được trích dẫn hoặc không được trích dẫn. Số nhận dạng có thể bắt đầu bằng một chữ số nhưng trừ khi được trích dẫn có thể không chỉ bao gồm các chữ số. Tên cơ sở dữ liệu, bảng và cột không được kết thúc bằng ký tự khoảng trắng.

VARCHAR có cho phép các ký tự đặc biệt trong MySQL không?

Cột VARCHAR, đúng như tên gọi, lưu trữ dữ liệu có độ dài thay đổi. Chúng có thể lưu trữ ký tự, số và ký tự đặc biệt giống như cột CHAR và có thể hỗ trợ chuỗi có kích thước tối đa 8000 byte.

Làm cách nào để bỏ qua các ký tự đặc biệt trong MySQL?

Bạn có thể sử dụng mysql_real_escape_string . mysql_real_escape_string() không thoát % và _, vì vậy bạn nên thoát riêng các ký tự đại diện MySQL ( % và _ ). Hàm mysql_real_escape_string() không được dùng trong PHP 5. 5.

Làm cách nào để chèn chuỗi có ký tự đặc biệt trong MySQL?

Để chèn các ký tự đặc biệt vào một chuỗi trong MySQL bằng PHP, bạn có thể sử dụng hàm mysqli_real_escape_string . Chức năng này giúp ngăn chặn các cuộc tấn công SQL injection bằng cách thoát các ký tự đặc biệt trong một chuỗi, để chúng được coi là ký tự chữ thay vì mã SQL.