Hướng dẫn is mysql primary key case sensitive? - khóa chính mysql có phân biệt chữ hoa chữ thường không?

B.3.4.1 & nbsp; độ nhạy của trường hợp trong các tìm kiếm chuỗi

Đối với các chuỗi không phải là (CHAR, VARCHAR, TEXT), các tìm kiếm chuỗi sử dụng đối chiếu của các toán hạng so sánh. Đối với các chuỗi nhị phân (____10,

mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1,
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
2), các so sánh sử dụng các giá trị số của các byte trong toán hạng; Điều này có nghĩa là đối với các ký tự chữ cái, so sánh có nhạy cảm với trường hợp.

Một so sánh giữa một chuỗi không phân biệt và chuỗi nhị phân được coi là so sánh các chuỗi nhị phân.

Các hoạt động so sánh đơn giản (

mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
3, sắp xếp và nhóm) dựa trên giá trị sắp xếp của mỗi nhân vật. Các ký tự có cùng giá trị sắp xếp được coi là cùng một ký tự. Ví dụ: nếu
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
4 và
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
5 có cùng giá trị sắp xếp trong một đối chiếu nhất định, chúng sẽ so sánh là bằng nhau.sort value. Characters with the same sort value are treated as the same character. For example, if
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
4 and
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
5 have the same sort value in a given collation, they compare as equal.

Bộ ký tự và đối chiếu mặc định là

mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
6 và
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
7, do đó, các so sánh chuỗi không phân biệt theo mặc định không nhạy cảm với trường hợp. Điều này có nghĩa là nếu bạn tìm kiếm với
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
8 như 'A%', bạn sẽ nhận được tất cả các giá trị cột bắt đầu bằng
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
9 hoặc
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
0. Để làm cho trường hợp tìm kiếm này nhạy cảm, hãy đảm bảo rằng một trong các toán hạng có đối chiếu nhị phân hoặc nhị phân. Ví dụ: nếu bạn đang so sánh một cột và một chuỗi mà cả hai đều có bộ ký tự
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
6, bạn có thể sử dụng toán tử
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
2 để khiến cả hai toán tử có đối chiếu
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
3 hoặc
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
4:

col_name COLLATE utf8mb4_0900_as_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE utf8mb4_0900_as_cs
col_name COLLATE utf8mb4_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE utf8mb4_bin

Nếu bạn muốn một cột luôn luôn được đối xử theo kiểu nhạy cảm trường hợp, hãy khai báo nó với một đối chiếu nhị phân hoặc nhị phân. Xem Phần & NBSP; 13.1.20, Tuyên bố Tạo bảng.

Để gây ra sự so sánh nhạy cảm với trường hợp của các chuỗi không phải là không nhạy cảm với trường hợp, sử dụng

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
2 để đặt tên cho một đối chiếu nhạy cảm trường hợp. Các chuỗi trong ví dụ sau đây thông thường là nhạy cảm trường hợp, nhưng
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
2 thay đổi so sánh với sự nhạy cảm của trường hợp: không nhạy cảm với trường hợp:

mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+

Một chuỗi nhị phân là nhạy cảm trường hợp trong so sánh. Để so sánh chuỗi dưới dạng không phân biệt chữ hoa chữ thường, hãy chuyển đổi nó thành một chuỗi không phân biệt và sử dụng

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
2 để đặt tên cho một đối chiếu không nhạy cảm trường hợp:

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+

Để xác định xem một giá trị có được so sánh dưới dạng chuỗi không phân biệt hay nhị phân hay không, hãy sử dụng hàm

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
8. Ví dụ này cho thấy
mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
9 trả về một chuỗi có đối chiếu không nhạy cảm với trường hợp, do đó, so sánh là không nhạy cảm trường hợp:

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+

Đối với chuỗi nhị phân, giá trị đối chiếu là

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
0, vì vậy so sánh là trường hợp nhạy cảm. Một bối cảnh mà bạn có thể mong đợi để xem
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
0 là cho các hàm nén, trả về chuỗi nhị phân như một quy tắc chung: chuỗi:

mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+

Để kiểm tra giá trị sắp xếp của một chuỗi,

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
2 có thể hữu ích. Xem Phần & NBSP; 12.8, Chức năng Chuỗi và toán tử.

9.2.3 & nbsp; độ nhạy của trường hợp định danh

Trong MySQL, cơ sở dữ liệu tương ứng với các thư mục trong thư mục dữ liệu. Mỗi bảng trong cơ sở dữ liệu tương ứng với ít nhất một tệp trong thư mục cơ sở dữ liệu (và có thể nhiều hơn, tùy thuộc vào công cụ lưu trữ). Trình kích hoạt cũng tương ứng với các tập tin. Do đó, độ nhạy trường hợp của hệ điều hành cơ bản đóng một phần trong độ nhạy trường hợp của cơ sở dữ liệu, bảng và tên kích hoạt. Điều này có nghĩa là những cái tên như vậy không nhạy cảm với trường hợp trong Windows, nhưng nhạy cảm với trường hợp trong hầu hết các giống UNIX. Một ngoại lệ đáng chú ý là macOS, dựa trên UNIX nhưng sử dụng loại hệ thống tệp mặc định (HFS+) không nhạy cảm trường hợp. Tuy nhiên, MacOS cũng hỗ trợ khối lượng UFS, có tính nhạy cảm với trường hợp giống như trên bất kỳ Unix nào. Xem Phần & NBSP; 1.7.1, Phần mở rộng MySQL cho SQL tiêu chuẩn. Biến hệ thống

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 cũng ảnh hưởng đến cách máy chủ xử lý độ nhạy của trường hợp định danh, như được mô tả sau trong phần này.

Ghi chú

Mặc dù cơ sở dữ liệu, bảng và tên kích hoạt không nhạy cảm với trường hợp trên một số nền tảng, bạn không nên đề cập đến một trong số này bằng cách sử dụng các trường hợp khác nhau trong cùng một câu lệnh. Tuyên bố sau đây sẽ không hoạt động vì nó đề cập đến một bảng cả là

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
4 và AS
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
5:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

Phân vùng, phân vùng, cột, chỉ mục, thường xuyên được lưu trữ, sự kiện và tên nhóm tài nguyên không nhạy cảm với bất kỳ nền tảng nào, cũng không phải là bí danh cột.

Tuy nhiên, tên của các nhóm logfile là nhạy cảm trường hợp. Điều này khác với SQL tiêu chuẩn.

Theo mặc định, các bí danh bảng có tính nhạy cảm với trường hợp trên Unix, nhưng không phải như vậy trên Windows hoặc MacOS. Tuyên bố sau đây sẽ không hoạt động trên UNIX, bởi vì nó đề cập đến bí danh cả

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+
0 và AS
mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
9:

mysql> SELECT col_name FROM tbl_name AS a
       WHERE a.col_name = 1 OR A.col_name = 2;

Tuy nhiên, câu lệnh tương tự này được cho phép trên Windows. Để tránh các vấn đề gây ra bởi sự khác biệt như vậy, tốt nhất là áp dụng một quy ước nhất quán, chẳng hạn như luôn luôn tạo và đề cập đến cơ sở dữ liệu và bảng sử dụng tên chữ thường. Công ước này được khuyến nghị cho tính di động tối đa và dễ sử dụng.

Cách các tên bảng và cơ sở dữ liệu được lưu trữ trên đĩa và được sử dụng trong MySQL bị ảnh hưởng bởi biến hệ thống

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3.
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 có thể lấy các giá trị được hiển thị trong bảng sau. Biến này không ảnh hưởng đến độ nhạy trường hợp của số nhận dạng kích hoạt. Trên Unix, giá trị mặc định là
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 là 0. Trên Windows, giá trị mặc định là 1. Trên macOS, giá trị mặc định là 2.not affect case sensitivity of trigger identifiers. On Unix, the default value of
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 is 0. On Windows, the default value is 1. On macOS, the default value is 2.

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 chỉ có thể được cấu hình khi khởi tạo máy chủ. Thay đổi cài đặt
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 sau khi máy chủ được khởi tạo bị cấm.

Giá trịNghĩa
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
3
Tên bảng và cơ sở dữ liệu được lưu trữ trên đĩa bằng cách sử dụng Lettercase được chỉ định trong câu lệnh
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
4 hoặc
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
5. So sánh tên là nhạy cảm trường hợp. Bạn không nên đặt biến này thành 0 nếu bạn đang chạy MySQL trên một hệ thống có tên tệp không phân biệt chữ hoa chữ thường (như Windows hoặc MacOS). Nếu bạn buộc biến này thành 0 với
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
6 trên hệ thống tệp không nhạy cảm trường hợp và truy cập các tên bảng
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
7 bằng cách sử dụng các chữ cái khác nhau, tham nhũng chỉ mục có thể dẫn đến.not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or macOS). If you force this variable to 0 with
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
6 on a case-insensitive file system and access
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
7 tablenames using different lettercases, index corruption may result.
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
8
Tên bảng được lưu trữ bằng chữ thường trên đĩa và so sánh tên không nhạy cảm trường hợp. MySQL 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. Hành vi này cũng áp dụng cho tên cơ sở dữ liệu và bí danh bảng.
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
9
Tên bảng và cơ sở dữ liệu được lưu trữ trên đĩa bằng cách sử dụng Lettercase được chỉ định trong câu lệnh
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
4 hoặc
mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+
5, nhưng MySQL chuyển đổi chúng thành chữ thường khi tra cứu. So sánh tên không nhạy cảm với trường hợp. Điều này chỉ hoạt động trên các hệ thống tệp không nhạy cảm với trường hợp!
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
2 Tên bảng và tên xem được lưu trữ bằng chữ thường, như đối với
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
3.only on file systems that are not case-sensitive!
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
2 table names and view names are stored in lowercase, as for
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
3.

Nếu bạn đang sử dụng MySQL trên một nền tảng, bạn thường không phải sử dụng cài đặt

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
3 khác với mặc định. Tuy nhiên, bạn có thể gặp khó khăn nếu bạn muốn chuyển bảng giữa các nền tảng khác nhau về độ nhạy của trường hợp hệ thống tệp. Ví dụ: trên Unix, bạn có thể có hai bảng khác nhau có tên
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
4 và
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+
5, nhưng trên Windows, hai tên này được coi là giống hệt nhau. Để tránh các vấn đề truyền dữ liệu phát sinh từ thư của cơ sở dữ liệu hoặc tên bảng, bạn có hai tùy chọn:

  • Sử dụng

    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    3 trên tất cả các hệ thống. Nhược điểm chính với điều này là khi bạn sử dụng
    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    8 hoặc
    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    9, bạn không thấy tên trong Lettercase ban đầu của họ.

  • Sử dụng

    mysql> SELECT col_name FROM tbl_name AS a
           WHERE a.col_name = 1 OR A.col_name = 2;
    0 trên Unix và
    mysql> SELECT col_name FROM tbl_name AS a
           WHERE a.col_name = 1 OR A.col_name = 2;
    1 trên Windows. Điều này bảo tồn thư của cơ sở dữ liệu và tên bảng. Nhược điểm của điều này là bạn phải đảm bảo rằng các câu lệnh của bạn luôn đề cập đến cơ sở dữ liệu và tên bảng của bạn với chữ cái chính xác trên Windows. Nếu bạn chuyển các câu lệnh của mình sang Unix, nơi Lettercase có ý nghĩa, chúng không hoạt động nếu Lettercase không chính xác.

    Ngoại lệ: Nếu bạn đang sử dụng các bảng

    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    2 và bạn đang cố gắng tránh các vấn đề truyền dữ liệu này, bạn nên sử dụng
    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    3 trên tất cả các nền tảng để buộc các tên được chuyển đổi thành chữ thường.
    : If you are using
    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    2 tables and you are trying to avoid these data transfer problems, you should use
    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    3 on all platforms to force names to be converted to lowercase.

Tên đối tượng có thể được coi là trùng lặp nếu các dạng viết hoa của chúng bằng nhau theo một đối chiếu nhị phân. Điều đó đúng với tên của con trỏ, điều kiện, quy trình, chức năng, điểm lưu, các tham số thường xuyên được lưu trữ, các biến cục bộ chương trình được lưu trữ và plugin. Nó không đúng với tên của các cột, ràng buộc, cơ sở dữ liệu, phân vùng, câu lệnh được chuẩn bị với

mysql> SELECT col_name FROM tbl_name AS a
       WHERE a.col_name = 1 OR A.col_name = 2;
4, bảng, trình kích hoạt, người dùng và các biến do người dùng xác định.

Độ nhạy của trường hợp hệ thống tệp có thể ảnh hưởng đến các tìm kiếm trong các cột chuỗi của bảng

mysql> SELECT col_name FROM tbl_name AS a
       WHERE a.col_name = 1 OR A.col_name = 2;
5. Để biết thêm thông tin, xem Phần & NBSP; 10.8.7, Sử dụng đối chiếu trong thông tin_schema tìm kiếm.

Là khóa chính trong trường hợp SQL

Nếu bạn khai báo một cột là khóa duy nhất hoặc khóa chính, chỉ mục được tạo ngầm là nhạy cảm trường hợp..

Là trường hợp từ khóa MySQL

Các từ khóa trong SQL không nhạy cảm trường hợp cho các DBMS phổ biến nhất.Máy tính không quan tâm bạn viết, chọn, chọn hoặc chọn;Vì vậy, về lý thuyết, bạn có thể viết theo cách bạn thích. for the most popular DBMSs. The computer doesn't care whether you write SELECT , select, or sELeCt ; so, in theory, you can write however you like.

Là trường hợp mysql

Một cột chuỗi nhạy cảm hoặc không phụ thuộc vào loại cột.Các loại char và varchar không nhạy cảm với trường hợp theo mặc định, nhưng có thể được khai báo là nhị phân để làm cho chúng trở nên nhạy cảm.Các cột Enum, Set và văn bản không nhạy cảm trường hợp.Cột Blob là trường hợp nhạy cảm.

Có phải trường hợp phím độc đáo của mysql không

Theo mặc định, MySQL bỏ qua sự khác biệt trong trường hợp và không gian theo dõi trên Varchar.Nếu bạn cần nó nhạy cảm trường hợp, bạn có thể thay đổi bảng thành nhị phân Varchar (...).Sử dụng Hiển thị Tạo bảng để hiểu rõ hơn về cách MySQL chuyển đổi điều này thành ký hiệu đầy đủ. . If you need it to be case sensitive, you can alter the table to be varchar(...) binary . Use show create table to better understand how MySQL converts this to full notation.