Hầu như tất cả các ký tự bạn liệt kê có thể được chèn trực tiếp vào trường text
hoặc char
mà không gặp vấn đề gì.
Tùy thuộc vào ký tự trích dẫn mà bạn sử dụng, bạn chỉ cần "thoát" cùng một ký tự, vì vậy khi sử dụng trích dẫn đơn '
, bạn không phải thoát khỏi trích dẫn kép
'a string'
"another string"
0. Với trích dẫn, bạn có thể thoát khỏi nó bằng một dấu gạch chéo 'a string'
"another string"
1 hoặc tăng gấp đôi nhân vật 'a string'
"another string"
2.Các nhân vật chém trở lại cũng cần phải được trốn thoát hoặc nhân đôi.
Dưới đây là một ví dụ về cách xử lý các ký tự khác nhau: //www.db-fiddle.com/f/qiv1asqdrylzkue4hazwgu/1
create table accident_report [id integer, description text];
insert accident_report[id, description] values
[1, '@#$%^&*[]_+[{}]|:;",.?/'],
[2, '\\'],
[3, '\''],
[4, ''''];
select * from accident_report;
Điều thú vị là màu mã đánh dấu không hoàn toàn đúng với các ký tự được trích dẫn kép.
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 [
'a string'
"another string"
0]. 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ế độ
'a string'
"another string"
5 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
'a string'
"another string"
6. 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 'a string'
"another string"
6 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 'a string'
"another string"
6. A nonbinary string is a string of characters. It has a
character set other than 'a string'
"another string"
6 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'
"another string"
8, để 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'
"another string"
9 '[hoặc 'a string'
'a' ' ' 'string'
0'] để 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ế độ SQL
'a string'
'a' ' ' 'string'
1 đượ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'
"another string"
1], đượ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'
3 chỉ là 'a string'
'a' ' ' 'string'
4. Những chuỗi này là nhạy cảm trường hợp. Ví dụ, 'a string'
'a' ' ' 'string'
5 được hiểu là một backspace, nhưng 'a string'
'a' ' ' 'string'
6 được hiểu là 'a string'
'a' ' ' 'string'
7. Xử lý thoát được thực hiện theo bộ ký tự được chỉ định bởi biến hệ thống 'a string'
'a' ' ' 'string'
8. Đ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'
3 is just 'a string'
'a' ' ' 'string'
4. These sequences are case-sensitive. For
example, 'a string'
'a' ' ' 'string'
5 is interpreted as a backspace, but 'a string'
'a' ' ' 'string'
6 is interpreted as 'a string'
'a' ' ' 'string'
7. Escape processing is done according to the character set indicated by the 'a string'
'a' ' ' 'string'
8 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
9 | Một nhân vật ASCII NUL [ 0] |
1 | Một ký tự một trích dẫn [' ] |
3 | Một ký tự trích dẫn kép [____10] |
5 | Một ký tự backspace |
6 | Một ký tự dòng mới [linefeed] |
7 | Một nhân vật trở lại vận chuyển |
8 | Một ký tự tab |
9 | ASCII 26 [Control+Z]; Xem ghi chú theo bảng |
0 | Một ký tự Backslash [ 1] |
2 | Một nhân vật 3; Xem ghi chú theo bảng |
4 | Một nhân vật 5; Xem ghi chú theo bảng |
Ký tự ASCII 26 có thể được mã hóa dưới dạng
[_charset_name]'string' [COLLATE collation_name]
9 để 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 _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
7 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.Trước ký tự trích dẫn bởi một ký tự thoát [
'a string'
"another string"
1]. Một '
bên trong một chuỗi được trích dẫn với
'a string'
"another string"
0 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ự, 'a string'
"another string"
0 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ố text
1 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 text
2], 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'
"another string"
1] 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 text
4 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ự text
4 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 text
4
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
text
6 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àmtext
7. Giao diện Perl DBI cung cấp phương thứctext
8 để 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.