Đối chiếu MySQL_connection
Trong MariaDB, bộ ký tự mặc định là latin1 và đối chiếu mặc định là latin1_swedish_ci (tuy nhiên, điều này có thể khác ở một số bản phân phối, xem ví dụ Sự khác biệt trong MariaDB trong Debian). Cả bộ ký tự và đối chiếu đều có thể được chỉ định từ máy chủ cho đến cấp độ cột, cũng như cho các kết nối máy khách-máy chủ. Khi thay đổi bộ ký tự và không chỉ định đối chiếu, đối chiếu mặc định cho bộ ký tự mới luôn được sử dụng Show
Các bộ ký tự và đối chiếu luôn xếp tầng xuống, do đó, một cột không có đối chiếu được chỉ định sẽ tìm bảng mặc định, bảng cho cơ sở dữ liệu và cơ sở dữ liệu cho máy chủ. Do đó, có thể kiểm soát cực kỳ chi tiết đối với tất cả các bộ ký tự và đối chiếu được sử dụng trong dữ liệu của bạn Có thể xem các đối chiếu mặc định cho mỗi bộ ký tự bằng câu lệnh SHOW COLLATION, chẳng hạn, để tìm đối chiếu mặc định cho bộ ký tự latin2 SHOW COLLATION LIKE 'latin2%'; +---------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +---------------------+---------+----+---------+----------+---------+ | latin2_czech_cs | latin2 | 2 | | Yes | 4 | | latin2_general_ci | latin2 | 9 | Yes | Yes | 1 | | latin2_hungarian_ci | latin2 | 21 | | Yes | 1 | | latin2_croatian_ci | latin2 | 27 | | Yes | 1 | | latin2_bin | latin2 | 77 | | Yes | 1 | +---------------------+---------+----+---------+----------+---------+ Cấp máy chủBiến hệ thống character_set_server có thể được sử dụng để thay đổi bộ ký tự máy chủ mặc định. Nó có thể được đặt cả khi khởi động hoặc động, bằng lệnh SET SET character_set_server = 'latin2'; Tương tự, biến collation_server được sử dụng để đặt đối chiếu máy chủ mặc định SET collation_server = 'latin2_czech_cs'; Cấp cơ sở dữ liệuCác câu lệnh CREATE DATABASE và ALTER DATABASE có các mệnh đề đối chiếu và bộ ký tự tùy chọn. Nếu những thứ này bị bỏ đi, mặc định của máy chủ được sử dụng CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin'; ALTER DATABASE czech_slovak_names COLLATE = 'keybcs2_general_ci'; Để xác định bộ ký tự mặc định được cơ sở dữ liệu sử dụng, hãy sử dụng SHOW CREATE DATABASE czech_slovak_names; +--------------------+--------------------------------------------------------------------------------+ | Database | Create Database | +--------------------+--------------------------------------------------------------------------------+ | czech_slovak_names | CREATE DATABASE `czech_slovak_names` /*!40100 DEFAULT CHARACTER SET keybcs2 */ | +--------------------+--------------------------------------------------------------------------------+ hoặc cách khác, đối với bộ ký tự và đối chiếu SELECT * FROM INFORMATION_SCHEMA.SCHEMATA; +--------------+--------------------+----------------------------+------------------------+----------+ | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | +--------------+--------------------+----------------------------+------------------------+----------+ | def | czech_slovak_names | keybcs2 | keybcs2_general_ci | NULL | | def | information_schema | utf8 | utf8_general_ci | NULL | | def | mysql | latin1 | latin1_swedish_ci | NULL | | def | performance_schema | utf8 | utf8_general_ci | NULL | | def | test | latin1 | latin1_swedish_ci | NULL | +--------------+--------------------+----------------------------+------------------------+----------+ Cũng có thể chỉ định đối chiếu và vì mỗi đối chiếu chỉ áp dụng cho một bộ ký tự nên bộ ký tự được liên kết sẽ tự động được chỉ định CREATE DATABASE danish_names COLLATE 'utf8_danish_ci'; SHOW CREATE DATABASE danish_names; +--------------+----------------------------------------------------------------------------------------------+ | Database | Create Database | +--------------+----------------------------------------------------------------------------------------------+ | danish_names | CREATE DATABASE `danish_names` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci */ | +--------------+----------------------------------------------------------------------------------------------+ Mặc dù có các biến hệ thống character_set_database và collation_database có thể được đặt động, nhưng chúng được sử dụng để xác định bộ ký tự và đối chiếu cho cơ sở dữ liệu mặc định và chỉ nên được đặt bởi máy chủ Cấp độ bảngCác câu lệnh CREATE TABLE và ALTER TABLE hỗ trợ các mệnh đề đối chiếu và bộ ký tự tùy chọn, một phần mở rộng MariaDB và MySQL cho SQL tiêu chuẩn ________số 8Nếu không cung cấp bộ ký tự cũng như đối chiếu, giá trị mặc định của cơ sở dữ liệu sẽ được sử dụng. Nếu chỉ cung cấp bộ ký tự, đối chiếu mặc định cho bộ ký tự đó sẽ được sử dụng. Nếu chỉ cung cấp đối chiếu, thì bộ ký tự được liên kết sẽ được sử dụng. Xem Bộ ký tự được hỗ trợ và Bộ sưu tập ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]; Nếu không cung cấp đối chiếu, đối chiếu sẽ được đặt thành đối chiếu mặc định cho bộ ký tự đó. Xem Bộ ký tự được hỗ trợ và Bộ sưu tập Đối với các cột VARCHAR hoặc TEXT, CONVERT TO CHARACTER SET sẽ thay đổi loại dữ liệu nếu cần để đảm bảo cột mới đủ dài để lưu trữ nhiều ký tự như cột ban đầu Ví dụ: cột văn bản ascii yêu cầu một byte đơn cho mỗi ký tự, vì vậy cột có thể chứa tối đa 65.535 ký tự. Nếu cột được chuyển đổi thành utf8, có thể cần 3 byte cho mỗi ký tự, vì vậy cột sẽ được chuyển đổi thành MEDIUMTEXT để có thể giữ cùng số lượng ký tự CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';0 sẽ chuyển đổi các cột CHAR, VARCHAR và TEXT thành BINARY, VARBINARY và BLOB tương ứng và từ thời điểm đó sẽ không còn bộ ký tự hoặc bị ảnh hưởng bởi các câu lệnh CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';1 trong tương lai Để tránh thay đổi loại dữ liệu do CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';1, thay vào đó hãy sử dụng CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';3 trên các cột riêng lẻ. Ví dụ SET character_set_server = 'latin2';0 Cấp độ cộtBộ ký tự và đối chiếu cũng có thể được chỉ định cho các cột là kiểu ký tự CHAR, TEXT hoặc VARCHAR. Các câu lệnh CREATE TABLE và ALTER TABLE hỗ trợ các mệnh đề đối chiếu và bộ ký tự tùy chọn cho mục đích này - không giống như các mệnh đề ở cấp độ bảng, các định nghĩa cấp độ cột là SQL chuẩn SET character_set_server = 'latin2';1 Nếu không cung cấp đối chiếu cũng như bộ ký tự, giá trị mặc định của bảng sẽ được sử dụng. Nếu chỉ bộ ký tự được chỉ định, thì bộ ký tự mặc định của bộ ký tự đó được sử dụng, trong khi nếu chỉ bộ ký tự được chỉ định, thì bộ ký tự được liên kết sẽ được sử dụng Khi sử dụng ALTER TABLE để thay đổi bộ ký tự của cột, bạn cần đảm bảo bộ ký tự tương thích với dữ liệu của mình. MariaDB sẽ ánh xạ dữ liệu tốt nhất có thể, nhưng có thể mất dữ liệu nếu không cẩn thận Câu lệnh SHOW CREATE TABLE hoặc cơ sở dữ liệu INFORMATION SCHEMA có thể được sử dụng để xác định các bộ ký tự và đối chiếu cột SET character_set_server = 'latin2';2____13 Tên tệpKể từ MariaDB 5. 1, biến hệ thống character_set_filesystem đã kiểm soát việc giải thích tên tệp được cung cấp dưới dạng chuỗi ký tự. Điều này ảnh hưởng đến các câu lệnh và chức năng sau chữTheo mặc định, bộ ký tự và đối chiếu được sử dụng cho các chữ được xác định bởi các biến hệ thống character_set_connection và collation_connection. Tuy nhiên, chúng cũng có thể được chỉ định rõ ràng SET character_set_server = 'latin2';4 Bộ ký tự của chuỗi ký tự không có phần giới thiệu bộ ký tự được xác định bởi biến hệ thống character_set_connection truy vấn này SET character_set_server = 'latin2';5 luôn trả về cùng một tên bộ ký tự trong cả hai cột character_set_client và character_set_connection bình thường (e. g. trong quá trình bắt tay hoặc sau truy vấn ĐẶT TÊN) được đặt thành các giá trị bằng nhau. Tuy nhiên, có thể đặt thành các giá trị khác nhau ví dụCác ví dụ khi đặt @@character_set_client và @@character_set_connection thành các giá trị khác nhau có thể hữu ích ví dụ 1 Giả sử, chúng ta có cơ sở dữ liệu utf8 với bảng này SET character_set_server = 'latin2';6 Bây giờ chúng tôi kết nối với nó bằng cách sử dụng "mysql. exe", sử dụng bộ ký tự DOS (cp850 trên máy Tây Âu) và muốn tìm nạp tất cả các bản ghi bằng 'ö' theo quy tắc danh bạ tiếng Đức Có thể với những điều sau đây SET character_set_server = 'latin2';7 Điều này sẽ trở lại SET character_set_server = 'latin2';8 Nó hoạt động như sau
Lưu ý, nếu chúng ta viết lại kịch bản như thế này SET character_set_server = 'latin2';9 chúng ta sẽ gặp lỗi SET collation_server = 'latin2_czech_cs';0 tại vì
ví dụ 2 Giả sử chúng ta có cơ sở dữ liệu utf8 và sử dụng "mysql. exe" từ một máy Tây Âu một lần nữa Chung ta co thể lam được việc nay SET collation_server = 'latin2_czech_cs';1 Nó sẽ tạo một bảng với một cột kiểu CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';4 Lưu ý, nếu chúng ta viết lại truy vấn như thế này SET collation_server = 'latin2_czech_cs';2 Nó sẽ tạo một bảng có cột kiểu CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';5, đây có lẽ không phải là một ý kiến hay NNgoài ra, CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';6 hoặc CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';7 có thể được sử dụng làm tiền tố để chuyển đổi một chữ thành bộ Ký tự Quốc gia (trong MariaDB luôn là utf8) Ví dụ SET collation_server = 'latin2_czech_cs';3____24 SET collation_server = 'latin2_czech_cs';5 Các chương trình và chế độ xem được lưu trữTheo mặc định, các chữ xuất hiện trong các chương trình và chế độ xem được lưu trữ sử dụng bộ ký tự và đối chiếu được chỉ định bởi các biến hệ thống character_set_connection và collation_connection khi chương trình được lưu trữ được tạo. Những giá trị này có thể được nhìn thấy bằng cách sử dụng câu lệnh SHOW CREATE. Để thay đổi bộ ký tự được sử dụng cho chữ trong chương trình được lưu trữ hiện có, cần phải xóa và tạo lại chương trình đã lưu trữ Đối với các tham số thường trình được lưu trữ và giá trị trả về, một bộ ký tự và đối chiếu có thể được chỉ định thông qua các mệnh đề CHARACTER SET và COLLATE. trước 5. 5, chỉ định đối chiếu không được hỗ trợ Ví dụ sau đây cho thấy bộ ký tự và đối chiếu được xác định tại thời điểm tạo SET collation_server = 'latin2_czech_cs';6 Ví dụ sau đây cho thấy cách chỉ định bộ ký tự và đối chiếu tham số chức năng SET collation_server = 'latin2_czech_cs';7 Hỗn hợp đối chiếu bất hợp phápMariaDB 10. 1. 28 - 10. 1. 29Trong MariaDB 10. 1. 28, bạn có thể gặp phải Lỗi 1267 khi thực hiện thao tác so sánh trong dạng xem trên bảng sử dụng hằng số nhị phân. Ví dụ, SET collation_server = 'latin2_czech_cs';8 Khi truy vấn dạng xem được ghi vào tệp, MariaDB sẽ chuyển đổi ký tự nhị phân thành một chuỗi ký tự, khiến nó bị hiểu sai khi bạn thực thi câu lệnh CREATE DATABASE czech_slovak_names CHARACTER SET = 'keybcs2' COLLATE = 'keybcs2_bin';8. Nếu bạn gặp sự cố này, hãy đặt bộ ký tự trong dạng xem để buộc nó thành giá trị bạn muốn MariaDB đưa ra lỗi này do một lỗi đã được sửa trong MariaDB 10. 1. 29. Các bản phát hành sau này không gây ra lỗi trong tình huống này Thí dụ. Thay đổi bộ ký tự mặc định thành UTF-8Để thay đổi bộ ký tự mặc định từ latin1 sang UTF-8, các cài đặt sau phải được chỉ định trong my. tập tin cấu hình cnf Đối chiếu MySQL là gì?Đối chiếu là một bộ quy tắc xác định cách so sánh và sắp xếp các chuỗi ký tự . Mỗi đối chiếu trong MySQL thuộc về một bộ ký tự. Mỗi bộ ký tự có ít nhất một đối chiếu và hầu hết có hai hoặc nhiều đối chiếu. Một đối chiếu sắp xếp các ký tự dựa trên trọng số.
Liệu MySQL 5. 7 hỗ trợ utf8mb4_0900_ai_ci?utf8mb4_0900_ai_ci chỉ được triển khai kể từ MySQL 8. 0 nên 5. 7 máy chủ không nhận ra nó . Bởi vì 5. 7 không nhận ra utf8mb4_0900_ai_ci , nó không thể đáp ứng yêu cầu bộ ký tự của máy khách và quay lại bộ ký tự và đối chiếu mặc định của nó ( latin1 và latin1_swedish_ci ).
Đối chiếu utf8mb4_0900_ai_ci là gì?Ý nghĩa của đối chiếu MySQL utf8mb4_0900_ai_ci là gì? . 0900 đề cập đến phiên bản Thuật toán đối chiếu Unicode. each character is stored as a maximum of 4 bytes in the UTF-8 encoding scheme. 0900 refers to the Unicode Collation Algorithm version.
Sự khác biệt giữa utf8mb3 và utf8mb4 là gì?utf8mb3 chỉ hỗ trợ các ký tự trong Mặt phẳng đa ngôn ngữ cơ bản (BMP). utf8mb4 hỗ trợ thêm các ký tự bổ sung nằm ngoài BMP . utf8mb3 sử dụng tối đa ba byte cho mỗi ký tự. utf8mb4 sử dụng tối đa bốn byte cho mỗi ký tự. |