Làm cách nào để chọn cột có ký tự đặc biệt trong MySQL?

MySQL có giao diện SQL rất phức tạp nhưng trực quan và dễ học. Chương này mô tả các lệnh, loại và chức năng khác nhau mà bạn sẽ cần biết để sử dụng MySQL hiệu quả và hiệu quả. Chương này cũng đóng vai trò là tài liệu tham khảo cho tất cả các chức năng có trong MySQL. Để sử dụng chương này một cách hiệu quả, bạn có thể thấy hữu ích khi tham khảo các mục lục khác nhau.

chữ. Cách viết chuỗi và số

Phần này mô tả các cách khác nhau để viết chuỗi và số trong MySQL. Nó cũng bao gồm các sắc thái khác nhau và "các vấn đề" mà bạn có thể gặp phải khi xử lý các kiểu cơ bản này trong MySQL

Chuỗi là một chuỗi các ký tự, được bao quanh bởi các ký tự trích dẫn đơn ['] hoặc trích dẫn kép [“] [chỉ trích dẫn đơn nếu bạn chạy ở chế độ ANSI]. ví dụ

'a string'
"another string"

Trong một chuỗi, các chuỗi nhất định có ý nghĩa đặc biệt. Mỗi chuỗi này bắt đầu bằng dấu gạch chéo ngượ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 |
+--------------------+
2], được gọi là ký tự thoát. MySQL nhận ra các chuỗi thoát sau

\0

Ký tự ASCII 0 [NUL]

\'

Một ký tự nháy đơn [']

\"

Ký tự trích dẫn kép [

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 |
+--------------------+
3]

\ b

Một ký tự xóa lùi

\N

Một ký tự dòng mới

\ r

Một ký tự xuống dòng

\t

Một ký tự tab

\z

ASCII[26] [Control-Z]. Ký tự này có thể được mã hóa để cho phép bạn khắc phục sự cố ASCII[26] là viết tắt của END-OF-FILE trên Windows. [ASCII[26] sẽ gây ra sự cố nếu bạn cố gắng sử dụng cơ sở dữ liệu mysql < tên tệp. ]

\\

Dấu gạch chéo ngượ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 |
+--------------------+
2] ký tự

\%

Một ký tự

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 |
+--------------------+
5. Điều này được sử dụng để tìm kiếm các trường hợp bằng chữ của
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 |
+--------------------+
5 trong ngữ cảnh mà nếu không thì
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 |
+--------------------+
5 sẽ được hiểu là ký tự đại diện. Xem Phần 6. 3. 2. 1

\_

Một ký tự

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 |
+--------------------+
8. Điều này được sử dụng để tìm kiếm các trường hợp bằng chữ của
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 |
+--------------------+
8 trong ngữ cảnh mà nếu không thì
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 |
+--------------------+
8 sẽ được hiểu là ký tự đại diện. Xem Phần 6. 3. 2. 1

Lưu ý rằng nếu bạn sử dụng

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 |
+--------------------+
01 hoặ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 |
+--------------------+
02 trong một số ngữ cảnh chuỗi, chúng sẽ trả về chuỗi
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 |
+--------------------+
01 và
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 |
+--------------------+
02 chứ không phải
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 |
+--------------------+
5 và
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 |
+--------------------+
8

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

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

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

  • Bạn có thể đặt trước ký tự trích dẫn bằng một ký tự thoát [

    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 |
    +--------------------+
    2]

  • Một ' bên trong một chuỗi được trích dẫn bằng " không cần xử lý đặc biệt và không cần nhân đôi hoặc thoát. Theo cách tương tự, " bên trong một chuỗi được trích dẫn bằng ' không cần xử lý đặc biệt

Các câu lệnh CHỌN được hiển thị ở đây minh họa cách hoạt động của trích dẫn và thoát

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 |
+--------------------+

Nếu bạn muốn chèn dữ liệu nhị phân vào một cột chuỗi [chẳng hạn như BLOB], các ký tự sau phải được biểu thị bằng các chuỗi thoát

NUL

mã ASCII 0. Bạn nên biểu thị điều này bằng

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 |
+--------------------+
08 [dấu gạch chéo ngược và ký tự ASCII
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 |
+--------------------+
09]

\

ASCII 92, dấu gạch chéo ngược. Thể hiện điều này bằng

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 |
+--------------------+
00

'

ASCII 39, trích dẫn đơn. Đại diện cho điều này bởi

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 |
+--------------------+
2‘

"

ASCII 34, trích dẫn kép. Đại diện cho điều này bởi

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 |
+--------------------+
2“

Nếu bạn viết mã C, bạn có thể sử dụng hàm API C mysql_real_escape_string[ ] để thoát các ký tự cho câu lệnh INSERT. Xem Phần 8. 4. 2. Trong Perl, bạn có thể sử dụng phương thức trích dẫn của gói DBI để 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 8. 2. 2

Bạn nên sử dụng hàm thoát trên bất kỳ chuỗi nào có thể chứa bất kỳ ký tự đặc biệt nào được liệt kê trước đó

Ngoài ra, nhiều API MySQL cung cấp một số loại 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 truy vấn, sau đó liên kết các giá trị dữ liệu với chúng khi bạn đưa ra truy vấn. Trong trường hợp này, API sẽ tự động thoát các ký tự đặc biệt trong các giá trị cho bạn

Số nguyên được biểu diễn dưới dạng một dãy các chữ số. phao sử dụng. như một dấu tách thập phân. Một trong hai loại số có thể được đặt trướ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 |
+--------------------+
03 để biểu thị giá trị âm

Ví dụ về số nguyên hợp 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 |
+--------------------+
0

Ví dụ về số dấu phẩy động hợp 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 |
+--------------------+
0

Một số nguyên có thể được sử dụng trong ngữ cảnh dấu phẩy động;

MySQL hỗ trợ các giá trị thập lục phân. Trong ngữ cảnh số, chúng hoạt động giống như một số nguyên [độ chính xác 64 bit]. Trong bối cảnh chuỗi, chúng hoạt động giống như một chuỗi nhị phân trong đó mỗi cặp chữ số hex được chuyển đổi thành một ký tự

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 |
+--------------------+
6

Cú pháp x'hexstring' [mới trong 4. 0] dựa trên ANSI SQL và cú pháp 0x dựa trên ODBC. Chuỗi thập lục phân thường được ODBC sử dụng để cung cấp giá trị cho các cột BLOB. Bạn có thể chuyển đổi một chuỗi hoặc một số thành hệ thập lục phân bằng hàm HEX[]

Giá trị NULL có nghĩa là “không có dữ liệu” và khác với các giá trị như 0 đối với kiểu số hoặc chuỗi rỗng đối với kiểu chuỗi. Xem Phần A. 5. 3

NULL có thể được đại diện bởi \N khi sử dụng định dạng nhập hoặc xuất tệp văn bản [LOAD DATA INFILE, SELECT. INTO OUTFILE]. Xem Phần 6. 4. 9

Cơ sở dữ liệu, bảng, chỉ mục, cột và tên bí danh

Tên cơ sở dữ liệu, bảng, chỉ mục, cột và bí danh đều tuân theo cùng một quy tắc trong MySQL. Bảng sau đây cho biết độ dài và ký tự được phép

Lưu ý rằng các quy tắc đã thay đổi bắt đầu từ MySQL Phiên bản 3. 23. 6 khi chúng tôi giới thiệu trích dẫn số nhận dạng [cơ sở dữ liệu, bảng và tên cột] với '. " cũng sẽ hoạt động để trích dẫn số nhận dạng nếu bạn chạy ở chế độ ANSI. Xem Phần 1. 7. 2

định danh

chiều dài tối đa

Ký tự được phép

cơ sở dữ liệu

64

Bất kỳ ký tự nào được cho phép trong tên thư mục ngoại trừ

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 |
+--------------------+
04 hoặc

Cái bàn

64

Bất kỳ ký tự nào được cho phép trong tên tệp, ngoại trừ

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 |
+--------------------+
04 hoặc

Cột

64

Tất cả nhân vật

bí danh

255

Tất cả nhân vật

Lưu ý rằng ngoài điều này, bạn không thể có ASCII[0] hoặc ASCII[255] hoặc ký tự trích dẫn trong mã định danh

Lưu ý rằng nếu mã định danh là một từ bị hạn chế hoặc chứa các ký tự đặc biệt, bạn phải luôn trích dẫn từ đó bằng ' khi sử dụng

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 |
+--------------------+
9

Trong các phiên bản trước của MySQL, quy tắc đặt tên như sau

  • Tên có thể bao gồm các ký tự chữ và số từ bộ ký tự hiện tại cũng như

    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 |
    +--------------------+
    8 và
    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 |
    +--------------------+
    07. Bộ ký tự mặc định là ISO-8859-1 Latin1; . Xem Phần 4. 6. 1

  • Tên có thể bắt đầu bằng bất kỳ ký tự nào hợp pháp trong tên. Đặc biệt, một tên có thể bắt đầu bằng một chữ số [điều này khác với nhiều hệ thống cơ sở dữ liệu khác. ]. Tuy nhiên, một tên không thể chỉ bao gồm các chữ số

  • Bạn không thể sử dụng. ký tự trong tên vì nó được sử dụng để mở rộng định dạng mà bạn có thể tham chiếu đến các cột

Bạn không nên sử dụng các tên như 1e vì biểu thức như 1e+1 không rõ ràng. Nó có thể được hiểu là biểu thức 1e + 1 hoặc là số 1e+1

Trong MySQL, bạn có thể tham chiếu đến một cột bằng bất kỳ biểu mẫu nào sau đây

Tham chiếu cột

Nghĩa

col_name

Cột col_name từ bất kỳ bảng nào được sử dụng trong truy vấn đều chứa cột có tên đó

tbl_name. col_name

Cột col_name từ bảng tbl_name của cơ sở dữ liệu hiện tại

db_name. tbl_name. col_name

Cột col_name từ bảng tbl_name của cơ sở dữ liệu db_name. Biểu mẫu này có sẵn trong Phiên bản MySQL 3. 22 hoặc muộn hơn

`tên_cột`

Một cột là một từ khóa hoặc chứa các ký tự đặc biệt

Bạn không cần chỉ định tbl_name hoặc db_name. tbl_name tiền tố cho tham chiếu cột trong câu lệnh trừ khi tham chiếu đó không rõ ràng. Ví dụ: giả sử mỗi bảng t1 và t2 chứa một cột c và bạn truy xuất c trong câu lệnh SELECT sử dụng cả t1 và t2. Trong trường hợp này, c không rõ ràng vì nó không phải là duy nhất trong số các bảng được sử dụng trong câu lệnh, vì vậy bạn phải cho biết bạn muốn nói đến bảng nào bằng cách viết t1. c hoặc t2. c. Tương tự, nếu bạn đang truy xuất từ ​​một bảng t trong cơ sở dữ liệu db1 và từ một bảng t trong cơ sở dữ liệu db2, bạn phải gọi các cột trong các bảng đó là db1. t. col_name và db2. t. col_name

cú pháp. tbl_name có nghĩa là bảng tbl_name trong cơ sở dữ liệu hiện tại. Cú pháp này được chấp nhận để tương thích với ODBC vì một số chương trình ODBC có tiền tố tên bảng với một. nhân vật

Phân biệt chữ hoa chữ thường trong tên

Trong MySQL, cơ sở dữ liệu và bảng tương ứng với các thư mục và tệp trong các thư mục đó. Do đó, phân biệt chữ hoa chữ thường của hệ điều hành cơ bản xác định phân biệt chữ hoa chữ thường của tên cơ sở dữ liệu và bảng. Điều này có nghĩa là tên bảng và cơ sở dữ liệu không phân biệt chữ hoa chữ thường trong Windows và phân biệt chữ hoa chữ thường trong hầu hết các loại Unix [Mac OS X là một ngoại lệ]. Xem Phần 1. 7. 3

Ghi chú. mặc dù tên bảng và cơ sở dữ liệu không phân biệt chữ hoa chữ thường đối với Windows, nhưng bạn không nên tham chiếu đến một cơ sở dữ liệu hoặc bảng nhất định bằng cách sử dụng các chữ hoa chữ thường khác nhau trong cùng một truy vấn. Truy vấn sau đây sẽ không hoạt động vì nó đề cập đến một bảng dưới dạng my_table và MY_TABLE

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 |
+--------------------+
2

Tên cột và bí danh cột không phân biệt chữ hoa chữ thường trong mọi trường hợp

Bí danh trên bảng phân biệt chữ hoa chữ thường. Truy vấn sau đây sẽ không hoạt động vì nó đề cập đến bí danh vừa là a vừa là A

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 |
+--------------------+
3

Nếu bạn gặp khó khăn trong việc ghi nhớ chữ cái cho tên bảng và cơ sở dữ liệu, hãy áp dụng quy ước nhất quán, chẳng hạn như luôn tạo cơ sở dữ liệu và bảng bằng cách sử dụng tên chữ thường

Một cách để tránh vấn đề này là bắt đầu mysqld với -O Lower_case_table_names=1. Theo mặc định, tùy chọn này là 1 trên Windows và 0 trên Unix

Nếu Lower_case_table_names là 1, MySQL sẽ chuyển đổi tất cả các tên bảng thành chữ thường khi lưu trữ và tra cứu. Lưu ý rằng nếu bạn thay đổi tùy chọn này, trước tiên bạn cần chuyển đổi tên bảng cũ thành chữ thường trước khi bắt đầu mysqld

MySQL hỗ trợ các biến cụ thể theo luồng với cú pháp @variablename. Tên biến có thể bao gồm các ký tự chữ và số từ bộ ký tự hiện tại và 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 |
+--------------------+
8,
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 |
+--------------------+
07 và. . Bộ ký tự mặc định là ISO-8859-1 Latin1; . Xem Phần 4. 6. 1

Các biến không cần phải được khởi tạo. Chúng chứa NULL theo mặc định và có thể lưu trữ giá trị số nguyên, thực hoặc chuỗi. Tất cả các biến cho một luồng sẽ tự động được giải phóng khi luồng thoát

Bạn có thể đặt một biến bằng cú pháp SET

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 |
+--------------------+
6

Bạn cũng có thể gán giá trị cho một biến trong các câu lệnh khác với SET. Tuy nhiên, trong trường hợp này toán tử gán là. = chứ không phải = vì = được dành riêng để so sánh trong các câu lệnh không phải SET

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 |
+--------------------+
7

Biến người dùng có thể được sử dụng khi biểu thức được phép. Lưu ý rằng điều này hiện không bao gồm các ngữ cảnh trong đó một số được yêu cầu rõ ràng, chẳng hạn như trong mệnh đề GIỚI HẠN của câu lệnh CHỌN hoặc mệnh đề BỎ QUA số LINES của câu lệnh LOAD DATA

Ghi chú. trong câu lệnh CHỌN, mỗi biểu thức chỉ được đánh giá khi nó được gửi tới máy khách. Điều này có nghĩa là trong mệnh đề HAVING, GROUP BY hoặc ORDER BY, bạn không thể tham chiếu đến một biểu thức liên quan đến các biến được đặt trong phần SELECT. Ví dụ: câu lệnh sau sẽ không hoạt động như mong đợi

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 |
+--------------------+
0

Lý do là @aa sẽ không chứa giá trị của hàng hiện tại, nhưng giá trị của id cho hàng được chấp nhận trước đó

Máy chủ MySQL hỗ trợ các kiểu nhận xét # đến cuối dòng, -- đến cuối dòng và /* trong dòng hoặc nhiều dòng */

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 |
+--------------------+
1

Lưu ý rằng kiểu nhận xét -- [dấu gạch ngang kép] yêu cầu bạn phải có ít nhất một khoảng trắng sau dấu gạch ngang thứ hai

Mặc dù máy chủ hiểu cú pháp nhận xét vừa được mô tả, nhưng có một số hạn chế về cách máy khách mysql phân tích cú pháp /*. */ bình luận

  • Các ký tự trích dẫn đơn và trích dẫn kép được sử dụng để biểu thị phần đầu của chuỗi được trích dẫn, ngay cả trong một nhận xét. Nếu trích dẫn không khớp với trích dẫn thứ hai trong nhận xét, trình phân tích cú pháp không nhận ra nhận xét đã kết thúc. Nếu bạn đang chạy mysql một cách tương tác, bạn có thể biết rằng nó đã bị nhầm lẫn như thế này vì lời nhắc thay đổi từ mysql> thành '> hoặc ">

  • Dấu chấm phẩy được sử dụng để biểu thị phần cuối của câu lệnh SQL hiện tại và bất cứ thứ gì theo sau nó để biểu thị phần đầu của câu lệnh tiếp theo

Những hạn chế này áp dụng cả khi bạn chạy mysql một cách tương tác và khi bạn đặt các lệnh trong một tệp và yêu cầu mysql đọc đầu vào của nó từ tệp đó với mysql < some-file

MySQL chỉ hỗ trợ kiểu nhận xét SQL

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 |
+--------------------+
60 ANSI nếu dấu gạch ngang thứ hai được theo sau bởi khoảng trắng. Xem Phần 1. 7. 4. 7

MySQL có kén chọn các từ dành riêng không?

Một vấn đề phổ biến bắt nguồn từ việc cố gắng tạo một bảng có tên cột sử dụng tên của kiểu dữ liệu hoặc hàm được tích hợp trong MySQL, chẳng hạn như DẤU THỜI GIAN hoặc NHÓM. Bạn được phép làm điều đó [ví dụ: ABS là tên cột được phép], nhưng khoảng trắng không được phép giữa tên hàm và phần tiếp theo sau

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 |
+--------------------+
61 khi sử dụng các hàm có tên cũng là tên cột

Các từ sau đây được dành riêng rõ ràng trong MySQL. Hầu hết chúng đều bị ANSI SQL92 cấm dưới dạng tên cột và/hoặc tên bảng [ví dụ: NHÓM]. Một số được dành riêng vì MySQL cần chúng và [hiện tại] đang sử dụng trình phân tích cú pháp yacc

Từ

Từ

Từ

CỘNG

TẤT CẢ CÁC

THAY ĐỔI

PHÂN TÍCH

BẰNG

TĂNG DẦN

AUTO_INCREMENT

BDB

BERKELEYDB

Ở GIỮA

LỚN

nhị phân

BÃI

CẢ HAI

QUA

THÁC

TRƯỜNG HỢP

BIẾN ĐỔI

CHAR

NHÂN VẬT

CỘT

CỘT

HẠN CHẾ

TẠO RA

THÁNH GIÁ

NGAY HIỆN TẠI

THỜI ĐIỂM HIỆN TẠI

DẤU THỜI GIAN HIỆN TẠI

CƠ SỞ DỮ LIỆU

CƠ SỞ DỮ LIỆU

DAY_HOUR

DAY_MINUTE

DAY_SECOND

THÁNG MƯỜI HAI

SỐ THẬP PHÂN

MẶC ĐỊNH

TRÌ HOÃN

XÓA BỎ

DESC

MÔ TẢ

RIÊNG BIỆT

KHÁC BIỆT

GẤP ĐÔI

RƠI VÃI

KHÁC

GỬI KÈM

THOÁT KHỎI

TỒN TẠI

GIẢI THÍCH

LĨNH VỰC

TRÔI NỔI

NGOẠI QUỐC

TỪ

TOÀN VĂN

CHỨC NĂNG

KHOẢN TRỢ CẤP

TẬP ĐOÀN

ĐANG CÓ

ƯU TIÊN CAO

GIỜ_PHÚT

HOUR_SECOND

NẾU

PHỚT LỜ

TRONG

MỤC LỤC

TRONG TẬP TIN

BÊN TRONG

INNODB

CHÈN

INSERT_ID

INT

số nguyên

THỜI GIAN

VÀO TRONG

THAM GIA

CHÌA KHÓA

phím

GIẾT CHẾT

LAST_INSERT_ID

LÃNH ĐẠO

TRÁI

THÍCH

GIỚI HẠN

DÒNG

TRỌNG TẢI

KHÓA

DÀI

LONGBLOB

VĂN BẢN DÀI

ƯU TIÊN THẤP

MASTER_SERVER_ID

TRẬN ĐẤU

VỪABLOB

TRUNG BÌNH

TRUNG BÌNH

MIỀN TRUNG

PHÚT_SECOND

MRG_MYISAM

TỰ NHIÊN

KHÔNG PHẢI

VÔ GIÁ TRỊ

SỐ

TRÊN

TỐI ƯU HÓA

TÙY CHỌN

TÙY CHỌN

HOẶC

TRẬT TỰ

BÊN NGOÀI

NGOẠI TỆ

MỘT PHẦN

ĐỘ CHÍNH XÁC

SƠ CẤP

ĐẶC QUYỀN

THỦ TỤC

thanh lọc

ĐỌC

THỰC

NGƯỜI GIỚI THIỆU

ĐĂNG KÝ

ĐỔI TÊN

THAY THẾ

YÊU CẦU

HẠN CHẾ

TRẢ LẠI

THU HỒI

ĐÚNG

THÍCH

LỰA CHỌN

BỘ

TRÌNH DIỄN

NHỎ

SONAME

SQL_AUTO_IS_NULL

SQL_BIG_RESULT

SQL_BIG_SELECTS

SQL_BIG_TABLES

SQL_BUFFER_RESULT

SQL_CALC_FOUND_ROWS

SQL_LOG_BIN

SQL_LOG_OFF

SQL_LOG_UPDATE

SQL_LOW_PRIORITY_UPDATES

SQL_MAX_JOIN_SIZE

SQL_QUOTE_SHOW_CREATE

SQL_SAFE_UPDATES

SQL_SELECT_LIMIT

SQL_SLAVE_SKIP_COUNTER

SQL_SMALL_RESULT

SQL_WARNINGS

SSL

BẮT ĐẦU

STRAIGHT_JOIN

SỌC

CÁI BÀN

NHỮNG CÁI BÀN

CHẤM DỨT

SAU ĐÓ

TINYBLOB

TINYINT

TINYTEXT

ĐẾN

THEO DÕI

LIÊN HIỆP

DUY NHẤT

MỞ KHÓA

CHƯA KÝ

CẬP NHẬT

CÁCH SỬ DỤNG

SỬ DỤNG

SỬ DỤNG

GIÁ TRỊ

BIẾN THÂN

VARCHAR

THAY ĐỔI

KHI NÀO

Ở ĐÂU

VỚI

VIẾT

NĂM THÁNG

ZEROFILL

Các ký hiệu sau [từ bảng trước] không được ANSI SQL cho phép nhưng được MySQL cho phép dưới dạng tên cột/bảng. Điều này là do một số tên này là tên rất tự nhiên và rất nhiều người đã sử dụng chúng

Làm cách nào để chọn tên cột có ký tự đặc biệt trong SQL?

Ví dụ, nếu bạn muốn chọn cột có ký tự đặc biệt '#', mã sẽ như thế này. var rows = dt. Select["","[#]"];

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

MySQL - Cách đưa các ký tự đặc biệt vào truy vấn .
\0 - Ký tự ASCII NUL [0x00]
\' - Một ký tự nháy đơn [ ' ]
\" - Ký tự trích dẫn kép [ " ]
\b - Một ký tự xóa lùi
\n - Một ký tự xuống dòng [linefeed]
\r - Ký tự xuống dòng
\t - Một ký tự tab
\Z - ASCII 26 [Control-Z]

Chúng ta có thể sử dụng các ký tự đặc biệt làm tên cột trong MySQL không?

Tên cột có ký tự đặc biệt cần được xử lý đặc biệt . Các quản trị viên nên xác định các tên cột tuân theo các quy tắc định danh SQL. [Xem "Tên cột" trong Quản trị TIBCO ActiveSpaces. ]

Làm cách nào để thoát các ký tự đặc biệt trong truy vấn chọn 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

Chủ Đề