Trường hợp khóa chính có phân biệt chữ hoa chữ thường trong MySQL không?

Trong Windows, không có tên bảng phân biệt chữ hoa chữ thường theo mặc định nhưng trong UNIX theo mặc định, các bảng có phân biệt chữ hoa chữ thường. Bạn có thể gặp sự cố nếu bạn di chuyển cơ sở dữ liệu của mình từ cửa sổ sang nền tảng UNIX và mã của bạn gặp lỗi 'không có bảng nào tồn tại' trong đó mã của bạn hoạt động tốt trong cửa sổ. Điều này là do tên bảng theo mặc định phân biệt chữ hoa chữ thường trong UNIX

Thí dụ

Nếu bạn có tên bảng là chữ hoa có tên là employee nhưng khi code của bạn có tên bảng là chữ thường thì nó báo lỗi hoặc ngược lại

Độ nhạy trường hợp của tên đối tượng là khác nhau đối với SQL Server và Amazon Aurora MySQL-Compatible Edition [Aurora MySQL]. Tên đối tượng SQL Server phân biệt chữ hoa chữ thường được xác định bởi bộ sưu tập. Tên Aurora MySQL có phân biệt chữ hoa chữ thường và có thể được điều chỉnh dựa trên tham số được đề cập sau đây

Trong Aurora MySQL, độ nhạy trường hợp được xác định bởi giá trị tham số

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
4. Nói chung có 3 giá trị có thể cho tham số này. Để tránh một số sự cố, bạn chỉ có thể sử dụng hai giá trị với tham số này

  • 0 — tên được lưu dưới dạng đã cho và so sánh phân biệt chữ hoa chữ thường. Bạn có thể chọn giá trị này cho tất cả các phiên bản Amazon Relational Database Service [Amazon RDS] for MySQL

  • 1 — tên được lưu trữ bằng chữ thường và so sánh không phân biệt chữ hoa chữ thường. Bạn có thể chọn giá trị này cho Amazon RDS for MySQL phiên bản 5. 6, phiên bản 5. 7 và phiên bản 8. 0. 19 trở lên 8. 0 phiên bản

Tham số

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
4 phải được đặt thành một phần của nhóm tham số DB tùy chỉnh trước khi tạo phiên bản DB. Bạn nên tránh thay đổi tham số
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
4 đối với các phiên bản cơ sở dữ liệu hiện có vì làm như vậy có thể gây ra sự không nhất quán với các bản sao lưu khôi phục tại thời điểm và các phiên bản DB bản sao đã đọc

Bản sao chỉ có quyền đọc phải luôn sử dụng cùng một giá trị tham số

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
4 như phiên bản CSDL nguồn

Theo mặc định, tên đối tượng đang được lưu trữ bằng chữ thường cho MySQL. Trong hầu hết các trường hợp, bạn sẽ muốn sử dụng các chuyển đổi AWS Database Migration Service để thay đổi tên lược đồ, bảng và cột thành chữ thường

ví dụ

Ví dụ: để tạo một bảng có tên EMPLOYEES viết hoa trong MySQL, bạn nên sử dụng như sau

CREATE TABLE EMPLOYEES [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];

Lệnh sau tạo một bảng có tên là employee viết thường

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];

MySQL sẽ tìm tên đối tượng với phân biệt chữ hoa chữ thường chính xác như được viết trong truy vấn

Bạn có thể tắt phân biệt chữ hoa chữ thường của tên bảng trong MySQL bằng cách đặt tham số

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
4 thành 1. Cột, chỉ mục, quy trình được lưu trữ, tên sự kiện và bí danh cột không phân biệt chữ hoa chữ thường trên cả hai nền tảng

Các ví dụ trong các phần trước đã được thực hiện mà không quan tâm đến chữ cái. Nhưng đôi khi bạn cần đảm bảo rằng một thao tác chuỗi phân biệt chữ hoa chữ thường và ngược lại. Phần này mô tả cách thực hiện điều đó đối với các phép so sánh thông thường. công thức 4. 11 bao hàm độ nhạy chữ hoa chữ thường trong các hoạt động khớp mẫu

Theo mặc định, so sánh chuỗi trong MySQL không phân biệt chữ hoa chữ thường

mysql> SELECT name, name = 'lead', name = 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name = 'lead' | name = 'LEAD' |
+----------+---------------+---------------+
| copper   |             0 |             0 |
| gold     |             0 |             0 |
| iron     |             0 |             0 |
| lead     |             1 |             1 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+

Việc thiếu phân biệt chữ hoa chữ thường cũng áp dụng cho các so sánh thứ tự tương đối

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+

Nếu bạn đã quen thuộc với thứ tự đối chiếu ASCII, bạn biết rằng các chữ cái viết thường có mã ASCII cao hơn các chữ cái viết hoa, do đó, kết quả trong cột so sánh thứ hai của truy vấn trước đó có thể làm bạn ngạc nhiên. Những kết quả đó phản ánh rằng việc sắp xếp chuỗi được thực hiện theo mặc định mà không quan tâm đến chữ cái, vì vậy cả

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
0 và
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
1 đều được coi là ít hơn về mặt từ vựng so với
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
2

So sánh chuỗi chỉ phân biệt chữ hoa chữ thường nếu ít nhất một trong các toán hạng là chuỗi nhị phân. Để kiểm soát độ nhạy trường hợp trong so sánh chuỗi, hãy sử dụng các kỹ thuật sau

  • Để làm cho trường hợp so sánh chuỗi trở nên nhạy cảm mà thông thường sẽ không có, hãy chuyển [chuyển đổi] một trong các chuỗi thành dạng nhị phân bằng cách sử dụng từ khóa

    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    3. Không quan trọng bạn tạo chuỗi nhị phân nào. Miễn là một trong số chúng, so sánh sẽ phân biệt chữ hoa chữ thường

    ________số 8

    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    3 có sẵn dưới dạng toán tử ép kiểu kể từ MySQL 3. 23

  • Để so sánh chuỗi không phân biệt chữ hoa chữ thường như thông thường, hãy chuyển đổi cả hai chuỗi thành cùng một chữ cái bằng cách sử dụng

    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    5 hoặc
    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    6

    CREATE TABLE employees [
        EMP_ID NUMERIC PRIMARY KEY,
        EMP_FULL_NAME VARCHAR[60] NOT NULL,
        AVG_SALARY NUMERIC NOT NULL];
    2

Các nguyên tắc tương tự có thể được áp dụng cho các hàm so sánh chuỗi. Ví dụ:

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
7 nhận hai đối số chuỗi và trả về -1, 0 hoặc 1, tùy thuộc vào chuỗi đầu tiên về mặt từ vựng có nhỏ hơn, bằng hoặc lớn hơn chuỗi thứ hai hay không. Cho đến MySQL 4. 0. 0,
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
7 phân biệt chữ hoa chữ thường;

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
5

Tuy nhiên, kể từ MySQL 4. 0. 1,

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
7 không phân biệt chữ hoa chữ thường

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
7

Để bảo tồn pre-4. 0. 1 hành vi, biến một trong các đối số thành chuỗi nhị phân

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
8

Nhân tiện, hãy lưu ý đặc biệt về thực tế là các giá trị trả về bằng 0 và khác 0 từ

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
7 biểu thị sự bình đẳng và bất bình đẳng. Điều này khác với toán tử so sánh
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
1, trả về 0 và khác 0 cho bất đẳng thức và đẳng thức

Để tránh bất ngờ khi so sánh chuỗi, hãy biết các quy tắc chung xác định xem chuỗi có phải là nhị phân hay không

  • Bất kỳ chuỗi ký tự, biểu thức chuỗi hoặc cột chuỗi nào cũng có thể được tạo thành nhị phân bằng cách đặt trước nó bằng từ khóa

    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    3. Nếu không có
    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    3, các quy tắc sau sẽ được áp dụng

  • Một biểu thức chuỗi là nhị phân nếu bất kỳ chuỗi cấu thành nào của nó là nhị phân, nếu không thì không. Ví dụ: kết quả được trả về bởi biểu thức

    mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
    +----------+----------------------+----------------------+
    | name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
    +----------+----------------------+----------------------+
    | copper   |                    0 |                    0 |
    | gold     |                    0 |                    0 |
    | iron     |                    0 |                    0 |
    | lead     |                    1 |                    0 |
    | mercury  |                    0 |                    0 |
    | platinum |                    0 |                    0 |
    | silver   |                    0 |                    0 |
    | tin      |                    0 |                    0 |
    +----------+----------------------+----------------------+
    4 này là nhị phân vì đối số thứ hai của nó là nhị phân

    mysql> SELECT name, name = 'lead', name = 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name = 'lead' | name = 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             0 |             0 |
    | gold     |             0 |             0 |
    | iron     |             0 |             0 |
    | lead     |             1 |             1 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    4
  • Cột chuỗi có phân biệt chữ hoa chữ thường hay không tùy thuộc vào loại cột. Các loại

    mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
    +----------+----------------------+----------------------+
    | name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
    +----------+----------------------+----------------------+
    | copper   |                    0 |                    0 |
    | gold     |                    0 |                    0 |
    | iron     |                    0 |                    0 |
    | lead     |                    1 |                    0 |
    | mercury  |                    0 |                    0 |
    | platinum |                    0 |                    0 |
    | silver   |                    0 |                    0 |
    | tin      |                    0 |                    0 |
    +----------+----------------------+----------------------+
    5 và
    mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
    +----------+----------------------+----------------------+
    | name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
    +----------+----------------------+----------------------+
    | copper   |                    0 |                    0 |
    | gold     |                    0 |                    0 |
    | iron     |                    0 |                    0 |
    | lead     |                    1 |                    0 |
    | mercury  |                    0 |                    0 |
    | platinum |                    0 |                    0 |
    | silver   |                    0 |                    0 |
    | tin      |                    0 |                    0 |
    +----------+----------------------+----------------------+
    6 không phân biệt chữ hoa chữ thường theo mặc định, nhưng có thể được khai báo là
    mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
    +----------+---------------+---------------+
    | name     | name < 'lead' | name < 'LEAD' |
    +----------+---------------+---------------+
    | copper   |             1 |             1 |
    | gold     |             1 |             1 |
    | iron     |             1 |             1 |
    | lead     |             0 |             0 |
    | mercury  |             0 |             0 |
    | platinum |             0 |             0 |
    | silver   |             0 |             0 |
    | tin      |             0 |             0 |
    +----------+---------------+---------------+
    3 để làm cho chúng phân biệt chữ hoa chữ thường. Các cột
    mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
    +----------+----------------------+----------------------+
    | name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
    +----------+----------------------+----------------------+
    | copper   |                    0 |                    0 |
    | gold     |                    0 |                    0 |
    | iron     |                    0 |                    0 |
    | lead     |                    1 |                    0 |
    | mercury  |                    0 |                    0 |
    | platinum |                    0 |                    0 |
    | silver   |                    0 |                    0 |
    | tin      |                    0 |                    0 |
    +----------+----------------------+----------------------+
    8,
    mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
    +----------+----------------------+----------------------+
    | name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
    +----------+----------------------+----------------------+
    | copper   |                    0 |                    0 |
    | gold     |                    0 |                    0 |
    | iron     |                    0 |                    0 |
    | lead     |                    1 |                    0 |
    | mercury  |                    0 |                    0 |
    | platinum |                    0 |                    0 |
    | silver   |                    0 |                    0 |
    | tin      |                    0 |                    0 |
    +----------+----------------------+----------------------+
    9 và
    CREATE TABLE employees [
        EMP_ID NUMERIC PRIMARY KEY,
        EMP_FULL_NAME VARCHAR[60] NOT NULL,
        AVG_SALARY NUMERIC NOT NULL];
    20 không phân biệt chữ hoa chữ thường.
    CREATE TABLE employees [
        EMP_ID NUMERIC PRIMARY KEY,
        EMP_FULL_NAME VARCHAR[60] NOT NULL,
        AVG_SALARY NUMERIC NOT NULL];
    21 cột có phân biệt chữ hoa chữ thường. [Xem bảng trong Công thức 4. 1. ]

Tóm lại, các phép so sánh có phân biệt chữ hoa chữ thường nếu chúng liên quan đến một chuỗi ký tự nhị phân hoặc biểu thức chuỗi hoặc một cột

mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
5
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
3,
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
6
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
3 hoặc
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
21. Các phép so sánh không phân biệt chữ hoa chữ thường nếu chúng chỉ liên quan đến các chuỗi ký tự không nhị phân hoặc biểu thức chuỗi hoặc các cột
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
5,
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
6,
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
8,
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
9 hoặc
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
20

Các cột

mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
8 và
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
9 không phân biệt chữ hoa chữ thường. Hơn nữa, vì chúng được lưu trữ nội bộ dưới dạng số, bạn không thể khai báo chúng phân biệt chữ hoa chữ thường trong định nghĩa bảng bằng cách thêm từ khóa
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
3. Tuy nhiên, bạn vẫn có thể sử dụng từ khóa
mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
3 trước các giá trị
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
8 hoặc
mysql> SELECT name, name = BINARY 'lead', BINARY name = 'LEAD' FROM metal;
+----------+----------------------+----------------------+
| name     | name = BINARY 'lead' | BINARY name = 'LEAD' |
+----------+----------------------+----------------------+
| copper   |                    0 |                    0 |
| gold     |                    0 |                    0 |
| iron     |                    0 |                    0 |
| lead     |                    1 |                    0 |
| mercury  |                    0 |                    0 |
| platinum |                    0 |                    0 |
| silver   |                    0 |                    0 |
| tin      |                    0 |                    0 |
+----------+----------------------+----------------------+
9 để so sánh nhằm tạo ra một thao tác phân biệt chữ hoa chữ thường

Nếu bạn thấy rằng bạn đã khai báo một cột bằng cách sử dụng loại không phù hợp với loại so sánh mà bạn thường sử dụng, hãy sử dụng

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
58
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
59 để thay đổi loại. Giả sử bạn có một bảng trong đó bạn lưu trữ các bài báo

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
0

Ở đây, cột

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
70 được khai báo là
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
21, đây là loại phân biệt chữ hoa chữ thường. Nếu bạn muốn chuyển đổi cột để nó không phân biệt chữ hoa chữ thường, bạn có thể thay đổi loại từ
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
21 thành
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
20 bằng cách sử dụng một trong hai câu lệnh
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
58
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
59 này

mysql> SELECT name, name < 'lead', name < 'LEAD' FROM metal;
+----------+---------------+---------------+
| name     | name < 'lead' | name < 'LEAD' |
+----------+---------------+---------------+
| copper   |             1 |             1 |
| gold     |             1 |             1 |
| iron     |             1 |             1 |
| lead     |             0 |             0 |
| mercury  |             0 |             0 |
| platinum |             0 |             0 |
| silver   |             0 |             0 |
| tin      |             0 |             0 |
+----------+---------------+---------------+
7

Trước MySQL 3. 22. 16,

CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
58
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
59.
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
78 không khả dụng, trong trường hợp đó bạn chỉ có thể sử dụng
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
58
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
59.
CREATE TABLE employees [
    EMP_ID NUMERIC PRIMARY KEY,
    EMP_FULL_NAME VARCHAR[60] NOT NULL,
    AVG_SALARY NUMERIC NOT NULL];
81. Xem Chương 8 để biết thêm thông tin

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

Trong Oracle, các khóa chính phân biệt chữ hoa chữ thường , vì vậy nếu hai giá trị chỉ khác nhau về trường hợp thì chúng có thể được sử dụng làm hai khóa chính khác nhau.

Là trường hợp MySQL

Tên bảng được lưu trữ bằng chữ thường trên đĩa và so sánh tên không phân biệt chữ hoa chữ thường . 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.

trường hợp nào sau đây

A cột chuỗi có phân biệt chữ hoa chữ thường hay không tùy thuộc vào loại cột. Theo mặc định, các loại CHAR và VARCHAR không phân biệt chữ hoa chữ thường, nhưng có thể được khai báo là BINARY để làm cho chúng phân biệt chữ hoa chữ thường. Các cột ENUM , SET và TEXT không phân biệt chữ hoa chữ thường. Các cột BLOB phân biệt chữ hoa chữ thường.

Tại sao trường hợp MySQL

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. Do đó, phân biệt chữ hoa chữ thường của hệ điều hành cơ bản đóng một phần trong phân biệt chữ hoa chữ thường của tên cơ sở dữ liệu và tên bảng .

Chủ Đề