Ký tự tiếng Việt MySQL
Xảy ra lỗi sau khi nhập Xin hỗ trợ tôi Show
ActiveRecord::StatementInvalid in ProjectsController#create Mysql2::Error: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '<': SELECT MAX(`projects`.`rgt`) FROM `projects` WHERE `projects`.`parent_id` IS NULL AND (name < 'Xin hãy hỗ trợ tôi.') Vì vậy, bạn cần cài đặt bộ ký tự cho mysql. Hy vọng hữu ích của bạn Chương này trình bày các vấn đề về quốc tế hóa (các khả năng của MySQL để thích ứng với việc sử dụng cục bộ) và bản địa hóa (lựa chọn các quy ước cục bộ cụ thể) 9. 1. Hỗ trợ bộ ký tựMySQL bao gồm hỗ trợ bộ ký tự cho phép bạn lưu trữ dữ liệu bằng nhiều bộ ký tự khác nhau và thực hiện so sánh theo nhiều đối chiếu khác nhau. Bạn có thể chỉ định các bộ ký tự ở cấp độ máy chủ, cơ sở dữ liệu, bảng và cột. MySQL hỗ trợ việc sử dụng các bộ ký tự cho các công cụ lưu trữ mysql> 57, mysql> 58, mysql> 59 và mysql> 60Chương này thảo luận về các chủ đề sau
Các vấn đề về bộ ký tự không chỉ ảnh hưởng đến việc lưu trữ dữ liệu mà còn ảnh hưởng đến giao tiếp giữa các chương trình máy khách và máy chủ MySQL. Nếu bạn muốn chương trình máy khách giao tiếp với máy chủ bằng bộ ký tự khác với bộ ký tự mặc định, bạn sẽ cần chỉ ra ký tự nào. Ví dụ: để sử dụng bộ ký tự Unicode mysql> 61, hãy đưa ra câu lệnh này sau khi kết nối với máy chủSET NAMES 'utf8'; Để biết thêm thông tin về cấu hình bộ ký tự để sử dụng ứng dụng và các sự cố liên quan đến bộ ký tự trong giao tiếp máy khách/máy chủ, hãy xem và 9. 1. 1. Bộ ký tự và bộ sưu tập nói chungMột bộ ký tự là một tập hợp các ký hiệu và mã hóa. Đối chiếu là một bộ quy tắc để so sánh các ký tự trong một bộ ký tự. Hãy làm rõ sự khác biệt bằng một ví dụ về bộ ký tự tưởng tượng Giả sử rằng chúng ta có một bảng chữ cái với bốn chữ cái. “______ 162”, “______ 163”, “________ 164”, “________ 165”. Chúng tôi cung cấp cho mỗi chữ cái một số. “______162” = 0, “______163” = 1, “ mysql> 64” = 2, “mysql> 65” = 3. Chữ cái “mysql> 62” là một ký hiệu, số 0 là mã hóa cho “mysql> 62”, và sự kết hợp của cả bốn chữ cái và mã hóa của chúng là một bộ ký tựGiả sử rằng chúng ta muốn so sánh hai giá trị chuỗi, “______162” và “ mysql> 63”. Cách đơn giản nhất để làm điều này là xem mã hóa. 0 cho “mysql> 62” và 1 cho “mysql> 63”. Vì 0 nhỏ hơn 1, nên ta nói “mysql> 62” nhỏ hơn “mysql> 63”. Những gì chúng tôi vừa làm là áp dụng một đối chiếu cho bộ ký tự của chúng tôi. Đối chiếu là một bộ quy tắc (chỉ có một quy tắc trong trường hợp này). “so sánh các bảng mã. ” Chúng tôi gọi đây là phép đối chiếu đơn giản nhất trong tất cả các phép đối chiếu có thể cóNhưng nếu chúng ta muốn nói rằng chữ thường và chữ in hoa là tương đương nhau thì sao? . (1) coi các chữ thường “ mysql> 64” và “mysql> 65” tương đương với “mysql> 62” và “mysql> 63”; . Chúng tôi gọi đây là đối chiếu phân biệt chữ hoa chữ thường. Nó phức tạp hơn một chút so với đối chiếu nhị phânTrong cuộc sống thực, hầu hết các bộ ký tự đều có nhiều ký tự. không chỉ “ mysql> 62” và “mysql> 63” mà cả bảng chữ cái, đôi khi là nhiều bảng chữ cái hoặc hệ thống chữ viết phương Đông với hàng nghìn ký tự, cùng với nhiều ký hiệu đặc biệt và dấu chấm câu. Ngoài ra, trong cuộc sống thực, hầu hết các đối chiếu có nhiều quy tắc, không chỉ để phân biệt chữ hoa, mà còn để phân biệt trọng âm ("dấu" là một dấu gắn liền với một ký tự như trong tiếng Đức "mysql> 84"), và cho nhiều- MySQL có thể làm những việc này cho bạn
Về những khía cạnh này, MySQL vượt xa hầu hết các hệ quản trị cơ sở dữ liệu khác. Tuy nhiên, để sử dụng các tính năng này một cách hiệu quả, bạn cần biết những bộ ký tự và bộ đối chiếu nào khả dụng, cách thay đổi các giá trị mặc định và cách chúng ảnh hưởng đến hành vi của các hàm và toán tử chuỗi. 9. 1. 2. Bộ ký tự và bộ sưu tập trong MySQLMáy chủ MySQL có thể hỗ trợ nhiều bộ ký tự. Để liệt kê các bộ ký tự có sẵn, hãy sử dụng câu lệnh. Một phần danh sách sau. Để biết thông tin đầy đủ hơn, xem mysql> Bất kỳ bộ ký tự đã cho nào luôn có ít nhất một đối chiếu. Nó có thể có một số bộ sưu tập. Để liệt kê các đối chiếu cho một bộ ký tự, hãy sử dụng câu lệnh. Ví dụ: để xem các đối chiếu cho bộ ký tự mysql> 89 (cp1252 Tây Âu), hãy sử dụng câu lệnh này để tìm các tên đối chiếu bắt đầu bằng mysql> 89mysql> 5Các bộ sưu tập mysql> 89 có các ý nghĩa sauĐối chiếu Ý nghĩa mysql> 92Tiếng Đức DIN-1mysql> 93Tiếng Thụy Điển/Phần Lanmysql> 94Tiếng Đan Mạch/Tiếng Na Uymysql> 95Tiếng Đức DIN-2mysql> 96Nhị phân theo mã hóa mysql> 89mysql> 98Đa ngôn ngữ (Tây Âu)mysql> 99Đa ngôn ngữ (ISO Tây Âu), phân biệt chữ hoa chữ thườngmysql> 500Tiếng Tây Ban Nha hiện đạiBộ sưu tập có những đặc điểm chung
Trong trường hợp một bộ ký tự có nhiều đối chiếu, có thể không rõ đối chiếu nào phù hợp nhất cho một ứng dụng nhất định. Để tránh chọn sai đối chiếu, có thể hữu ích khi thực hiện một số phép so sánh với các giá trị dữ liệu đại diện để đảm bảo rằng một đối chiếu nhất định sắp xếp các giá trị theo cách bạn mong đợi Đối chiếu-Biểu đồ. Tổ chức là một trang web hữu ích cho thông tin cho biết cách so sánh đối chiếu này với đối chiếu khác 9. 1. 3. Chỉ định bộ ký tự và bộ sưu tậpCó các cài đặt mặc định cho bộ ký tự và đối chiếu ở bốn cấp độ. máy chủ, cơ sở dữ liệu, bảng và cột. Mô tả trong các phần sau đây có vẻ phức tạp, nhưng trong thực tế, người ta thấy rằng mặc định nhiều cấp dẫn đến kết quả tự nhiên và rõ ràng mysql> 507 được sử dụng trong các mệnh đề chỉ định một bộ ký tự. mysql> 508 có thể được sử dụng như một từ đồng nghĩa với mysql> 507Các vấn đề về bộ ký tự không chỉ ảnh hưởng đến việc lưu trữ dữ liệu mà còn ảnh hưởng đến giao tiếp giữa các chương trình máy khách và máy chủ MySQL. Nếu bạn muốn chương trình máy khách giao tiếp với máy chủ bằng bộ ký tự khác với bộ ký tự mặc định, bạn sẽ cần chỉ ra ký tự nào. Ví dụ: để sử dụng bộ ký tự Unicode mysql> 61, hãy đưa ra câu lệnh này sau khi kết nối với máy chủSET NAMES 'utf8'; Để biết thêm thông tin về các vấn đề liên quan đến bộ ký tự trong giao tiếp máy khách/máy chủ, hãy xem 9. 1. 3. 1. Bộ ký tự máy chủ và đối chiếuMáy chủ MySQL có bộ ký tự máy chủ và đối chiếu máy chủ. Chúng có thể được đặt khi khởi động máy chủ trên dòng lệnh hoặc trong tệp tùy chọn và thay đổi khi chạy Ban đầu, bộ ký tự máy chủ và đối chiếu phụ thuộc vào các tùy chọn mà bạn sử dụng khi bắt đầu. Bạn có thể sử dụng cho bộ ký tự. Cùng với đó, bạn có thể thêm đối chiếu. Nếu bạn không chỉ định một bộ ký tự, điều đó giống như nói. Nếu bạn chỉ chỉ định một bộ ký tự (ví dụ: mysql> 89) nhưng không phải là đối chiếu, điều đó cũng giống như nói vì mysql> 93 là đối chiếu mặc định cho mysql> 89. Do đó, ba lệnh sau đây đều có tác dụng như nhaumysql> 9Một cách để thay đổi cài đặt là biên dịch lại. Nếu bạn muốn thay đổi bộ ký tự và đối chiếu mặc định của máy chủ khi xây dựng từ các nguồn, hãy sử dụng. và làm đối số cho cấu hình. Ví dụ SET NAMES 'utf8';0 Hoặc SET NAMES 'utf8';1 Cả hai và định cấu hình xác minh rằng tổ hợp bộ ký tự/đối chiếu hợp lệ. Nếu không, mỗi chương trình sẽ hiển thị thông báo lỗi và kết thúc Bộ ký tự và đối chiếu máy chủ được sử dụng làm giá trị mặc định nếu bộ ký tự và đối chiếu cơ sở dữ liệu không được chỉ định trong các câu lệnh. Họ không có mục đích nào khác Bộ ký tự và đối chiếu máy chủ hiện tại có thể được xác định từ các giá trị của biến hệ thống và. Các biến này có thể được thay đổi trong thời gian chạy 9. 1. 3. 2. Bộ ký tự cơ sở dữ liệu và đối chiếuMọi cơ sở dữ liệu đều có bộ ký tự cơ sở dữ liệu và đối chiếu cơ sở dữ liệu. Các câu lệnh và có các mệnh đề tùy chọn để chỉ định bộ ký tự cơ sở dữ liệu và đối chiếu SET NAMES 'utf8';2 Từ khóa mysql> 526 có thể được sử dụng thay cho mysql> 527Tất cả các tùy chọn cơ sở dữ liệu được lưu trữ trong một tệp văn bản có tên mysql> 528 có thể tìm thấy trong thư mục cơ sở dữ liệuMệnh đề mysql> 507 và mysql> 530 cho phép tạo cơ sở dữ liệu với các bộ ký tự và đối chiếu khác nhau trên cùng một máy chủ MySQLVí dụ SET NAMES 'utf8';8 MySQL chọn bộ ký tự cơ sở dữ liệu và đối chiếu cơ sở dữ liệu theo cách sau
Bộ ký tự cơ sở dữ liệu và đối chiếu được sử dụng làm giá trị mặc định cho định nghĩa bảng nếu bộ ký tự bảng và đối chiếu không được chỉ định trong các câu lệnh. Bộ ký tự cơ sở dữ liệu cũng được sử dụng bởi. Bộ ký tự và đối chiếu không có mục đích nào khác Bộ ký tự và đối chiếu cho cơ sở dữ liệu mặc định có thể được xác định từ các giá trị của biến hệ thống và. Máy chủ đặt các biến này bất cứ khi nào cơ sở dữ liệu mặc định thay đổi. Nếu không có cơ sở dữ liệu mặc định, các biến có cùng giá trị với các biến hệ thống cấp máy chủ tương ứng và 9. 1. 3. 3. Bộ ký tự bảng và đối chiếuMỗi bảng có một bộ ký tự bảng và đối chiếu bảng. Các câu lệnh và có các mệnh đề tùy chọn để chỉ định bộ ký tự bảng và đối chiếu mysql> 0Ví dụ mysql> 0MySQL chọn bộ ký tự bảng và đối chiếu theo cách sau
Bộ ký tự bảng và đối chiếu được sử dụng làm giá trị mặc định cho các định nghĩa cột nếu bộ ký tự và đối chiếu cột không được chỉ định trong các định nghĩa cột riêng lẻ. Bộ ký tự bảng và đối chiếu là các phần mở rộng của MySQL; 9. 1. 3. 4. Bộ ký tự cột và đối chiếuMỗi cột "ký tự" (nghĩa là cột loại , hoặc ) có một bộ ký tự cột và đối chiếu cột. Cú pháp định nghĩa cột cho và có các mệnh đề tùy chọn để chỉ định bộ ký tự cột và đối chiếu mysql> 1Các mệnh đề này cũng có thể được sử dụng cho và các cột mysql> 2ví dụ mysql> 3MySQL chọn bộ ký tự cột và đối chiếu theo cách sau
Mệnh đề mysql> 507 và mysql> 530 là SQL chuẩnNếu bạn sử dụng để chuyển đổi một cột từ bộ ký tự này sang bộ ký tự khác, MySQL sẽ cố gắng ánh xạ các giá trị dữ liệu, nhưng nếu bộ ký tự không tương thích thì có thể xảy ra mất dữ liệu 9. 1. 3. 5. Chuỗi ký tự Bộ ký tự chữ và đối chiếuMỗi chuỗi ký tự có một bộ ký tự và đối chiếu Một chuỗi ký tự bằng chữ có thể có một trình giới thiệu bộ ký tự tùy chọn và mệnh đề mysql> 530mysql> 8ví dụ mysql> 9Đối với câu lệnh đơn giản mysql> 595', chuỗi có bộ ký tự và đối chiếu được xác định bởi các biến hệ thống vàBiểu thức mysql> 598 chính thức được gọi là người giới thiệu. Nó báo cho trình phân tích cú pháp, “chuỗi sắp theo dõi sử dụng bộ ký tự mysql> 533. ” Bởi vì điều này đã khiến mọi người bối rối trong quá khứ, chúng tôi nhấn mạnh rằng người giới thiệu không thay đổi chuỗi thành bộ ký tự của người giới thiệu như sẽ làm. Nó không làm thay đổi giá trị của chuỗi, mặc dù có thể xảy ra hiện tượng đệm. Người giới thiệu chỉ là một tín hiệu. Người giới thiệu cũng hợp pháp trước ký hiệu chữ hex chữ và số hex tiêu chuẩn (SET NAMES 'utf8';01' và SET NAMES 'utf8';02), hoặc trước ký hiệu chữ trường bit ( SET NAMES 'utf8';03' và SET NAMES 'utf8';04) ví dụ mysql> 50MySQL xác định bộ ký tự và đối chiếu của một chữ theo cách sau
ví dụ
Trình giới thiệu bộ ký tự và mệnh đề mysql> 530 được triển khai theo thông số kỹ thuật SQL tiêu chuẩnTrình giới thiệu cho biết bộ ký tự cho chuỗi sau, nhưng hiện tại không thay đổi cách trình phân tích cú pháp thực hiện xử lý thoát trong chuỗi. Các lần thoát luôn được trình phân tích cú pháp diễn giải theo bộ ký tự được cung cấp bởi Các ví dụ sau đây cho thấy quá trình xử lý thoát xảy ra khi sử dụng ngay cả khi có mặt người giới thiệu. Các ví dụ sử dụng SET NAMES 'utf8';22 (thay đổi , như đã thảo luận trong phần ) và hiển thị các chuỗi kết quả bằng cách sử dụng hàm để có thể nhìn thấy nội dung chuỗi chính xác ví dụ 1 mysql> 54Ở đây, “ SET NAMES 'utf8';25” (giá trị hex SET NAMES 'utf8';26) được theo sau bởi “ SET NAMES 'utf8';27”, trình tự thoát cho dòng mới. Trình tự thoát được giải thích bằng cách sử dụng giá trị của mysql> 89 để tạo ra một dòng mới theo nghĩa đen (giá trị hex SET NAMES 'utf8';30). Điều này xảy ra ngay cả đối với chuỗi thứ hai. Nghĩa là, trình giới thiệu của SET NAMES 'utf8';31 không ảnh hưởng đến quá trình xử lý thoát của trình phân tích cú pháp ví dụ 2 mysql> 55Đây là SET NAMES 'utf8';33, một bộ ký tự trong đó chuỗi “ SET NAMES 'utf8';25” theo sau là “ SET NAMES 'utf8';35” (giá trị hex SET NAMES 'utf8';36 và SET NAMES 'utf8';37) là một ký tự nhiều byte hợp lệ. Do đó, hai byte đầu tiên của chuỗi được hiểu là một ký tự SET NAMES 'utf8';33 và “ SET NAMES 'utf8';35” không được hiểu là ký tự thoát. “ SET NAMES 'utf8';40” (giá trị hex SET NAMES 'utf8';41) sau đây không được hiểu là một phần của chuỗi thoát. Điều này đúng ngay cả đối với chuỗi thứ hai; 9. 1. 3. 6. Bộ Chữ Quốc GiaSQL tiêu chuẩn xác định hoặc như một cách để chỉ ra rằng một cột nên sử dụng một số bộ ký tự được xác định trước. mysql 5. 0 sử dụng mysql> 61 làm bộ ký tự được xác định trước này. Ví dụ, các khai báo kiểu dữ liệu này là tương đươngmysql> 56Như là những mysql> 57Bạn có thể sử dụng SET NAMES 'utf8';47' (hoặc SET NAMES 'utf8';48') để tạo một chuỗi trong bộ ký tự quốc gia. Những tuyên bố này là tương đương mysql> 58Để biết thông tin về nâng cấp bộ ký tự lên MySQL 5. 0 từ các phiên bản trước 4. 1, xem MySQL 3. 23, 4. 0, 4. 1 Hướng dẫn tham khảo 9. 1. 3. 7. Ví dụ về bộ ký tự và gán đối chiếuCác ví dụ sau đây cho thấy cách MySQL xác định các giá trị đối chiếu và bộ ký tự mặc định ví dụ 1. Định nghĩa bảng và cột mysql> 59Ở đây chúng tôi có một cột có bộ ký tự mysql> 89 và đối chiếu mysql> 92. Định nghĩa là rõ ràng, vì vậy đó là đơn giản. Lưu ý rằng không có vấn đề gì với việc lưu trữ cột mysql> 89 trong bảng SET NAMES 'utf8';52 ví dụ 2. Định nghĩa bảng và cột SET NAMES 'utf8';0 Lần này chúng ta có một cột với bộ ký tự mysql> 89 và đối chiếu mặc định. Mặc dù nó có vẻ tự nhiên, nhưng đối chiếu mặc định không được lấy từ cấp độ bảng. Thay vào đó, vì đối chiếu mặc định cho mysql> 89 luôn là mysql> 93, cột SET NAMES 'utf8';56 có đối chiếu là mysql> 93 (không phải mysql> 94)ví dụ 3. Định nghĩa bảng và cột SET NAMES 'utf8';1 Chúng tôi có một cột với bộ ký tự mặc định và đối chiếu mặc định. Trong trường hợp này, MySQL kiểm tra cấp độ bảng để xác định bộ ký tự cột và đối chiếu. Do đó, bộ ký tự cho cột SET NAMES 'utf8';56 là mysql> 89 và đối chiếu của nó là mysql> 94Ví dụ 4. Định nghĩa cơ sở dữ liệu, bảng và cột SET NAMES 'utf8';2 Chúng tôi tạo một cột mà không chỉ định bộ ký tự và đối chiếu của nó. Chúng tôi cũng không chỉ định bộ ký tự và đối chiếu ở cấp độ bảng. Trong trường hợp này, MySQL kiểm tra mức cơ sở dữ liệu để xác định cài đặt bảng, sau đó trở thành cài đặt cột. ) Do đó, bộ ký tự cho cột SET NAMES 'utf8';56 là SET NAMES 'utf8';52 và đối chiếu của nó là SET NAMES 'utf8';64 9. 1. 3. 8. Khả năng tương thích với các DBMS khácĐối với khả năng tương thích MaxDB, hai câu lệnh này giống nhau SET NAMES 'utf8';3 9. 1. 4. Bộ ký tự kết nối và bộ sưu tậpMột số biến hệ thống đối chiếu và bộ ký tự liên quan đến tương tác của máy khách với máy chủ. Một số trong số này đã được đề cập trong các phần trước Các biến hệ thống đối chiếu và bộ ký tự bổ sung có liên quan đến việc xử lý lưu lượng cho kết nối giữa máy khách và máy chủ. Mỗi máy khách có bộ ký tự liên quan đến kết nối và các biến hệ thống đối chiếu Xem xét “kết nối” là gì. Đó là những gì bạn tạo ra khi kết nối với máy chủ. Máy khách gửi câu lệnh SQL, chẳng hạn như truy vấn, qua kết nối đến máy chủ. Máy chủ gửi phản hồi, chẳng hạn như tập hợp kết quả hoặc thông báo lỗi, qua kết nối trở lại máy khách. Điều này dẫn đến một số câu hỏi về bộ ký tự và xử lý đối chiếu cho các kết nối máy khách, mỗi câu hỏi có thể được trả lời theo các biến hệ thống
Khách hàng có thể tinh chỉnh cài đặt cho các biến này hoặc tùy thuộc vào giá trị mặc định (trong trường hợp đó, bạn có thể bỏ qua phần còn lại của phần này). Nếu bạn không sử dụng giá trị mặc định, bạn phải thay đổi cài đặt ký tự cho từng kết nối với máy chủ Có hai câu lệnh ảnh hưởng đến các biến bộ ký tự liên quan đến kết nối dưới dạng một nhóm
Không thể sử dụng SET NAMES 'utf8';99 làm bộ ký tự khách, có nghĩa là nó không hoạt động cho SET NAMES 'utf8';22 hoặc SET NAMES 'utf8';88 Các chương trình máy khách MySQL mysql> 902, mysql> 903, mysql> 904, mysql> 905 và mysql> 906 xác định bộ ký tự mặc định sẽ sử dụng như sau
Khi một máy khách kết nối với máy chủ, nó sẽ gửi tên của bộ ký tự mà nó muốn sử dụng. Máy chủ sử dụng tên để đặt các biến , , và hệ thống. Trên thực tế, máy chủ thực hiện thao tác SET NAMES 'utf8';22 bằng cách sử dụng tên bộ ký tự Với máy khách, nếu bạn muốn sử dụng một bộ ký tự khác với mặc định, bạn có thể thực thi rõ ràng SET NAMES 'utf8';22 mỗi khi khởi động. Tuy nhiên, để đạt được kết quả tương tự dễ dàng hơn, bạn có thể thêm cài đặt tùy chọn vào dòng lệnh hoặc trong tệp tùy chọn của mình. Ví dụ: cài đặt tệp tùy chọn sau thay đổi ba biến bộ ký tự liên quan đến kết nối được đặt thành mysql> 915 mỗi khi bạn gọiSET NAMES 'utf8';7 Nếu bạn đang sử dụng ứng dụng khách có bật tính năng tự động kết nối lại (không được khuyến nghị), bạn nên sử dụng lệnh mysql> 916 thay vì SET NAMES 'utf8';22. Ví dụ SET NAMES 'utf8';8 Lệnh mysql> 916 đưa ra câu lệnh SET NAMES 'utf8';22 và cũng thay đổi bộ ký tự mặc định sử dụng khi kết nối lại sau khi kết nối bị ngắt Ví dụ. Giả sử rằng mysql> 920 được định nghĩa là mysql> 921. Nếu bạn không nói SET NAMES 'utf8';22 hoặc SET NAMES 'utf8';88, thì đối với mysql> 924, máy chủ sẽ gửi lại tất cả các giá trị cho mysql> 920 bằng cách sử dụng bộ ký tự mà máy khách đã chỉ định khi kết nối. Mặt khác, nếu bạn nói mysql> 926 hoặc mysql> 927 trước khi đưa ra câu lệnh, máy chủ sẽ chuyển đổi các giá trị SET NAMES 'utf8';52 thành mysql> 89 ngay trước khi gửi lại kết quả. Quá trình chuyển đổi có thể bị mất nếu có các ký tự không có trong cả hai bộ ký tựNếu bạn không muốn máy chủ thực hiện bất kỳ chuyển đổi tập kết quả hoặc thông báo lỗi nào, hãy đặt thành mysql> 932 hoặc mysql> 933SET NAMES 'utf8';9 Để xem các giá trị của bộ ký tự và các biến hệ thống đối chiếu áp dụng cho kết nối của bạn, hãy sử dụng các câu lệnh sau mysql> 90Bạn cũng phải xem xét môi trường mà các ứng dụng MySQL của bạn thực thi. Nhìn thấy Để biết thêm thông tin về bộ ký tự và thông báo lỗi, hãy xem 9. 1. 5. Định cấu hình Bộ ký tự và Đối chiếu cho Ứng dụngĐối với các ứng dụng lưu trữ dữ liệu bằng cách sử dụng bộ ký tự và đối chiếu mặc định của MySQL ( mysql> 89, mysql> 93), không cần cấu hình đặc biệt. Nếu các ứng dụng yêu cầu lưu trữ dữ liệu bằng cách sử dụng bộ ký tự hoặc đối chiếu khác, bạn có thể định cấu hình thông tin bộ ký tự theo một số cách
Khi các ứng dụng khác nhau yêu cầu cài đặt ký tự khác nhau, kỹ thuật trên mỗi cơ sở dữ liệu cung cấp rất nhiều tính linh hoạt. Nếu hầu hết hoặc tất cả các ứng dụng sử dụng cùng một bộ ký tự, thì việc chỉ định cài đặt ký tự khi khởi động máy chủ hoặc thời gian cấu hình có thể là thuận tiện nhất Đối với các kỹ thuật khởi động trên mỗi cơ sở dữ liệu hoặc máy chủ, các cài đặt sẽ kiểm soát bộ ký tự để lưu trữ dữ liệu. Các ứng dụng cũng phải cho máy chủ biết bộ ký tự nào sẽ sử dụng cho giao tiếp máy khách/máy chủ, như được mô tả trong hướng dẫn sau Các ví dụ hiển thị ở đây giả sử sử dụng bộ ký tự mysql> 61 và đối chiếu mysql> 581Chỉ định cài đặt ký tự cho mỗi cơ sở dữ liệu. Để tạo một cơ sở dữ liệu sao cho các bảng của nó sẽ sử dụng một bộ ký tự và đối chiếu mặc định đã cho để lưu trữ dữ liệu, hãy sử dụng một câu lệnh như thế này mysql> 91Các bảng được tạo trong cơ sở dữ liệu sẽ sử dụng mysql> 61 và mysql> 581 theo mặc định cho bất kỳ cột ký tự nàoCác ứng dụng sử dụng cơ sở dữ liệu cũng nên định cấu hình kết nối của chúng với máy chủ mỗi khi chúng kết nối. Điều này có thể được thực hiện bằng cách thực hiện câu lệnh mysql> 943 sau khi kết nối. Câu lệnh có thể được sử dụng bất kể phương thức kết nối. Máy khách, tập lệnh PHP, v.v.Trong một số trường hợp, có thể định cấu hình kết nối để sử dụng bộ ký tự mong muốn theo cách khác. Ví dụ: đối với các kết nối được thực hiện bằng cách sử dụng , bạn có thể chỉ định tùy chọn dòng lệnh để đạt được hiệu quả tương tự như mysql> 943Để biết thêm thông tin về cách định cấu hình kết nối máy khách, hãy xem Chỉ định cài đặt ký tự khi khởi động máy chủ. Để chọn một bộ ký tự và đối chiếu khi khởi động máy chủ, hãy sử dụng các tùy chọn và. Ví dụ: để chỉ định các tùy chọn trong tệp tùy chọn, hãy bao gồm các dòng này mysql> 92Các cài đặt này áp dụng trên toàn máy chủ và áp dụng làm cài đặt mặc định cho cơ sở dữ liệu được tạo bởi bất kỳ ứng dụng nào và cho các bảng được tạo trong các cơ sở dữ liệu đó Các ứng dụng vẫn cần định cấu hình kết nối của chúng bằng cách sử dụng SET NAMES 'utf8';22 hoặc tương đương sau khi chúng kết nối, như được mô tả trước đây. Bạn có thể muốn khởi động máy chủ với tùy chọn khiến SET NAMES 'utf8';22 được thực thi tự động cho mỗi máy khách kết nối. Tuy nhiên, điều này sẽ mang lại kết quả không nhất quán vì giá trị không được thực thi đối với người dùng có đặc quyền Chỉ định cài đặt ký tự tại thời điểm cấu hình MySQL. Để chọn một bộ ký tự và đối chiếu khi bạn định cấu hình và xây dựng MySQL từ nguồn, hãy sử dụng các tùy chọn và mysql> 93Máy chủ kết quả sử dụng mysql> 61 và mysql> 581 làm mặc định cho cơ sở dữ liệu và bảng cũng như cho kết nối máy khách. Không cần thiết phải sử dụng và chỉ định các giá trị mặc định đó khi khởi động máy chủ. Các ứng dụng cũng không cần phải định cấu hình kết nối của chúng bằng cách sử dụng SET NAMES 'utf8';22 hoặc tương đương sau khi chúng kết nối với máy chủ Bất kể bạn định cấu hình bộ ký tự MySQL để sử dụng ứng dụng như thế nào, bạn cũng phải xem xét môi trường mà các ứng dụng đó thực thi. Nếu bạn sẽ gửi câu lệnh bằng cách sử dụng văn bản UTF-8 được lấy từ tệp mà bạn tạo trong trình chỉnh sửa, thì bạn nên chỉnh sửa tệp bằng ngôn ngữ của môi trường được đặt thành UTF-8 để mã hóa tệp chính xác và để hệ điều hành . Nếu bạn sử dụng ứng dụng khách từ bên trong cửa sổ đầu cuối, thì cửa sổ đó phải được định cấu hình để sử dụng UTF-8, nếu không các ký tự có thể không hiển thị đúng cách. Đối với tập lệnh thực thi trong môi trường Web, tập lệnh phải xử lý mã hóa ký tự đúng cách để tương tác với máy chủ MySQL và tập lệnh phải tạo các trang chỉ báo chính xác mã hóa để trình duyệt biết cách hiển thị nội dung của trang. Ví dụ: bạn có thể bao gồm thẻ mysql> 960 này trong phần tử của mìnhmysql> 949. 1. 6. Bộ ký tự cho thông báo lỗiPhần này mô tả cách máy chủ sử dụng bộ ký tự để xây dựng thông báo lỗi và trả lại cho máy khách. Để biết thông tin về ngôn ngữ của thông báo lỗi (chứ không phải bộ ký tự), hãy xem Trong MySQL5. 0, máy chủ xây dựng các thông báo lỗi và gửi lại cho máy khách như sau
Phương pháp xây dựng thông báo lỗi trước đó có thể dẫn đến các thông báo chứa hỗn hợp các bộ ký tự trừ khi tất cả các mục liên quan chỉ chứa các ký tự ASCII. Vấn đề này được giải quyết trong MySQL 5. 5, trong đó các thông báo lỗi được tạo bên trong máy chủ bằng cách sử dụng UTF-8 và được trả về máy khách theo bộ ký tự được chỉ định bởi biến hệ thống Các phần sau thảo luận về các khía cạnh khác nhau của đối chiếu bộ ký tự Tên đối chiếu MySQL tuân theo các quy tắc này
9. 1. 7. 2. Sử dụng SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
...
|