Hướng dẫn how do i find special characters in mysql? - làm cách nào để tìm các ký tự đặc biệt trong mysql?

9.1.1 & nbsp; chuỗi chữ

Một chuỗi là một chuỗi các byte hoặc ký tự, được đặt trong các ký tự trích dẫn đơn (') hoặc kép ("). Ví dụ:

'a string'
"another string"

Các chuỗi được trích dẫn được đặt cạnh nhau được nối với một chuỗi. Các dòng sau là tương đương:

'a string'
'a' ' ' 'string'

Nếu chế độ ANSI_QUOTES SQL được bật, các chuỗi chữ chỉ có thể được trích dẫn trong các dấu ngoặc kép đơn vì một chuỗi được trích dẫn trong các dấu ngoặc kép được hiểu là một định danh.

Một chuỗi nhị phân là một chuỗi các byte. Mỗi chuỗi nhị phân có một bộ ký tự và đối chiếu có tên binary. Một chuỗi không phải là một chuỗi các ký tự. Nó có một bộ ký tự khác với binary và một đối chiếu tương thích với bộ ký tự.binary string is a string of bytes. Every binary string has a character set and collation named binary. A nonbinary string is a string of characters. It has a character set other than binary and a collation that is compatible with the character set.

Đối với cả hai loại chuỗi, so sánh dựa trên các giá trị số của đơn vị chuỗi. Đối với chuỗi nhị phân, đơn vị là byte; So sánh sử dụng các giá trị byte số. Đối với các chuỗi không phải là đơn vị là ký tự và một số bộ ký tự hỗ trợ các ký tự multibyte; So sánh sử dụng giá trị mã ký tự số. Đặt hàng mã ký tự là một chức năng của bộ đối chiếu chuỗi. .

Một chuỗi ký tự theo nghĩa đen có thể có một bộ giới thiệu bộ ký tự tùy chọn và mệnh đề

'a string'
'a' ' ' 'string'
1, để chỉ định nó là một chuỗi sử dụng một bộ ký tự và đối chiếu cụ thể:

[_charset_name]'string' [COLLATE collation_name]

Ví dụ:

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;

Bạn có thể sử dụng

'a string'
'a' ' ' 'string'
2 '(hoặc
'a string'
'a' ' ' 'string'
3') để tạo một chuỗi trong bộ ký tự quốc gia. Những tuyên bố này tương đương:

SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';

Để biết thông tin về các dạng cú pháp chuỗi này, xem Phần & NBSP; 10.3.7, Bộ Nhân vật Quốc gia Set, và Phần & NBSP; 10.3.8, Bộ giới thiệu ký tự.

Trong một chuỗi, một số chuỗi nhất định có ý nghĩa đặc biệt trừ khi chế độ

'a string'
'a' ' ' 'string'
4 SQL được bật. Mỗi chuỗi này bắt đầu bằng một dấu gạch chéo ngược (
'a string'
'a' ' ' 'string'
5), được gọi là nhân vật thoát. MySQL nhận ra các chuỗi thoát được hiển thị trong Bảng & NBSP; 9.1, Trình tự thoát ký tự đặc biệt. Đối với tất cả các chuỗi thoát khác, dấu gạch chéo ngược bị bỏ qua. Đó là, nhân vật trốn thoát được giải thích như thể nó không bị trốn thoát. Ví dụ,
'a string'
'a' ' ' 'string'
6 chỉ là
'a string'
'a' ' ' 'string'
7. Những chuỗi này là nhạy cảm trường hợp. Ví dụ,
'a string'
'a' ' ' 'string'
8 được hiểu là một backspace, nhưng
'a string'
'a' ' ' 'string'
9 được hiểu là
[_charset_name]'string' [COLLATE collation_name]
0. Xử lý thoát được thực hiện theo bộ ký tự được chỉ định bởi biến hệ thống
[_charset_name]'string' [COLLATE collation_name]
1. Điều này đúng ngay cả đối với các chuỗi được đặt trước bởi một người giới thiệu chỉ ra một bộ ký tự khác, như đã thảo luận trong Phần & NBSP; 10.3.6, bộ ký tự của ký tự ký tự và đối chiếu.escape character. MySQL recognizes the escape sequences shown in Table 9.1, “Special Character Escape Sequences”. For all other escape sequences, backslash is ignored. That is, the escaped character is interpreted as if it was not escaped. For example,
'a string'
'a' ' ' 'string'
6 is just
'a string'
'a' ' ' 'string'
7. These sequences are case-sensitive. For example,
'a string'
'a' ' ' 'string'
8 is interpreted as a backspace, but
'a string'
'a' ' ' 'string'
9 is interpreted as
[_charset_name]'string' [COLLATE collation_name]
0. Escape processing is done according to the character set indicated by the
[_charset_name]'string' [COLLATE collation_name]
1 system variable. This is true even for strings that are preceded by an introducer that indicates a different character set, as discussed in Section 10.3.6, “Character String Literal Character Set and Collation”.

Bảng & nbsp; 9.1 & nbsp; trình tự thoát ký tự đặc biệt

Trình tự thoátKý tự được thể hiện bằng trình tự
[_charset_name]'string' [COLLATE collation_name]
2
Một nhân vật ASCII NUL (
[_charset_name]'string' [COLLATE collation_name]
3)
[_charset_name]'string' [COLLATE collation_name]
4
Một ký tự một trích dẫn (')
[_charset_name]'string' [COLLATE collation_name]
6
Một ký tự trích dẫn kép (")
'a string'
'a' ' ' 'string'
8
Một ký tự backspace
[_charset_name]'string' [COLLATE collation_name]
9
Một ký tự dòng mới (linefeed)
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
0
Một nhân vật trở lại vận chuyển
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
1
Một ký tự tab
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
2
ASCII 26 (Control+Z); Xem ghi chú theo bảng
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
3
Một ký tự dấu gạch chéo ngược (
'a string'
'a' ' ' 'string'
5)
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
5
Một nhân vật
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
6; Xem ghi chú theo bảng
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
7
Một nhân vật
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
8; Xem ghi chú theo bảng

Ký tự ASCII 26 có thể được mã hóa dưới dạng

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
2 để cho phép bạn giải quyết vấn đề mà ASCII 26 là viết tắt của tệp cuối trên Windows. ASCII 26 trong một tệp gây ra sự cố nếu bạn cố gắng sử dụng
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
0 <
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
1.

Các chuỗi

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
5 và
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
7 được sử dụng để tìm kiếm các trường hợp theo nghĩa đen là
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
6 và
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
8 trong các bối cảnh phù hợp với mẫu, nơi chúng sẽ được hiểu là ký tự ký tự đại diện. Xem mô tả của toán tử
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
6 trong Phần & NBSP; 12.8.1, Chức năng so sánh chuỗi và toán tử. Nếu bạn sử dụng
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
5 hoặc
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
7 Bên ngoài bối cảnh phù hợp với mẫu, họ sẽ đánh giá các chuỗi
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
5 và
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
7, không phải là
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
6 và
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
8.

Có một số cách để bao gồm các ký tự trích dẫn trong một chuỗi:

  • Một ' bên trong một chuỗi được trích dẫn với ' có thể được viết là

    mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
    +-------+---------+-----------+--------+--------+
    | hello | "hello" | ""hello"" | hel'lo | 'hello |
    +-------+---------+-----------+--------+--------+
    
    mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
    +-------+---------+-----------+--------+--------+
    | hello | 'hello' | ''hello'' | hel"lo | "hello |
    +-------+---------+-----------+--------+--------+
    
    mysql> SELECT 'This\nIs\nFour\nLines';
    +--------------------+
    | This
    Is
    Four
    Lines |
    +--------------------+
    
    mysql> SELECT 'disappearing\ backslash';
    +------------------------+
    | disappearing backslash |
    +------------------------+
    5.

  • Một " bên trong một chuỗi được trích dẫn với " có thể được viết là

    mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
    +-------+---------+-----------+--------+--------+
    | hello | "hello" | ""hello"" | hel'lo | 'hello |
    +-------+---------+-----------+--------+--------+
    
    mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
    +-------+---------+-----------+--------+--------+
    | hello | 'hello' | ''hello'' | hel"lo | "hello |
    +-------+---------+-----------+--------+--------+
    
    mysql> SELECT 'This\nIs\nFour\nLines';
    +--------------------+
    | This
    Is
    Four
    Lines |
    +--------------------+
    
    mysql> SELECT 'disappearing\ backslash';
    +------------------------+
    | disappearing backslash |
    +------------------------+
    8.

  • Trước ký tự trích dẫn bởi một ký tự thoát (

    'a string'
    'a' ' ' 'string'
    5).

  • Một ' bên trong một chuỗi được trích dẫn với " không cần điều trị đặc biệt và không cần phải nhân đôi hoặc thoát khỏi. Theo cách tương tự, " bên trong một chuỗi được trích dẫn với ' không cần điều trị đặc biệt.

Các tuyên bố '4 sau đây cho thấy cách trích dẫn và thoát khỏi công việc:

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+

mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+

mysql> SELECT 'This\nIs\nFour\nLines';
+--------------------+
| This
Is
Four
Lines |
+--------------------+

mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+

Để chèn dữ liệu nhị phân vào cột chuỗi (chẳng hạn như cột '5), bạn nên biểu diễn các ký tự nhất định bằng các chuỗi thoát. Backslash (

'a string'
'a' ' ' 'string'
5) và ký tự trích dẫn được sử dụng để trích dẫn chuỗi phải được thoát. Trong một số môi trường khách hàng nhất định, cũng có thể cần phải thoát '7 hoặc điều khiển+z. Máy khách MySQL cắt các chuỗi trích dẫn có chứa các ký tự '7 nếu chúng không bị thoát và Control+Z có thể được thực hiện cho phần cuối trên Windows nếu không thoát ra. Đối với các chuỗi thoát đại diện cho mỗi ký tự này, hãy xem Bảng & NBSP; 9.1, Trình tự thoát ký tự đặc biệt.mysql client truncates quoted strings containing '7 characters if they are not escaped, and Control+Z may be taken for END-OF-FILE on Windows if not escaped. For the escape sequences that represent each of these characters, see Table 9.1, “Special Character Escape Sequences”.

Khi viết các chương trình ứng dụng, bất kỳ chuỗi nào có thể chứa bất kỳ ký tự đặc biệt nào phải được thoát đúng trước khi chuỗi được sử dụng làm giá trị dữ liệu trong câu lệnh SQL được gửi đến máy chủ MySQL. Bạn có thể làm điều này theo hai cách:

  • Xử lý chuỗi với một hàm thoát khỏi các ký tự đặc biệt. Trong chương trình C, bạn có thể sử dụng hàm API '9 C để thoát khỏi các ký tự. Xem mysql_real_escape_string_quote (). Trong các câu lệnh SQL xây dựng các câu lệnh SQL khác, bạn có thể sử dụng hàm "0. Giao diện Perl DBI cung cấp phương thức "1 để chuyển đổi các ký tự đặc biệt thành các chuỗi thoát thích hợp. Xem Phần & NBSP; 29.9, MYSQL PERL PERL API. Các giao diện ngôn ngữ khác có thể cung cấp một khả năng tương tự.

  • Thay thế cho việc thoát khỏi các ký tự đặc biệt một cách rõ ràng, nhiều API MySQL cung cấp khả năng giữ chỗ cho phép bạn chèn các điểm đánh dấu đặc biệt vào chuỗi câu lệnh và sau đó liên kết các giá trị dữ liệu với họ khi bạn đưa ra câu lệnh. Trong trường hợp này, API quan tâm đến việc thoát khỏi các ký tự đặc biệt trong các giá trị cho bạn.

Làm thế nào để bạn kiểm tra xem một chuỗi có chứa bất kỳ ký tự đặc biệt nào trong SQL không?

Chọn * Từ TableName WHERE CộtName như "%#%" hoặc tên cột như "%$%" hoặc (v.v.) lưu câu trả lời này. Save this answer.

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

MySQL nhận ra các chuỗi thoát được hiển thị trong Bảng 9.1, Trình tự thoát ký tự đặc biệt.... Bảng 9.1 Trình tự thoát ký tự đặc biệt ..

Những nhân vật đặc biệt trong SQL là gì?

SQL Server:..
[Đặc biệt] ví dụ:[A-Z].
[ ^Đặc biệt].
Mệnh đề thoát, ví dụ:%30!%%' THOÁT KHỎI '!'sẽ đánh giá 30% là đúng ..
'Các nhân vật cần được thoát ra với' ví dụ:Họ trở thành họ ..

Những nhân vậ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 các định danh được trích dẫn hoặc chưa được trích dẫn.Định danh 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ố.Cơ sở dữ liệu, bảng và tên cột không thể kết thúc bằng các ký tự không gian. are not permitted in quoted or unquoted identifiers. Identifiers may begin with a digit but unless quoted may not consist solely of digits. Database, table, and column names cannot end with space characters.