Bộ ký tự tốt nhất cho MySQL là gì?

Khi bạn bước ra khỏi giới hạn thoải mái của các bộ ký tự chỉ có tiếng Anh, bạn sẽ nhanh chóng thấy mình bị cuốn vào thế giới kỳ quặc tuyệt vời của UTF-8. Thật vậy, điều hướng qua các vấn đề liên quan đến UTF-8 có thể là một trải nghiệm khó chịu và sởn tóc gáy. Bài đăng này cung cấp một cuốn sách dạy nấu ăn ngắn gọn để giải quyết những vấn đề này khi làm việc với PHP và MySQL nói riêng, dựa trên kinh nghiệm thực tế và bài học kinh nghiệm

Qua

Francisco Claria

Francisco là một kỹ sư tập trung vào các ứng dụng đa nền tảng (Ionic/Cordova) và chuyên về tích hợp công nghệ phần cứng-phần mềm

CHIA SẺ

CHIA SẺ

Đọc bản tiếng Tây Ban Nha

Bộ ký tự tốt nhất cho MySQL là gì?
của bài viết này do Marisela Ordaz dịch

Là một nhà phát triển MySQL hoặc PHP, một khi bạn bước ra khỏi giới hạn thoải mái của các bộ ký tự chỉ có tiếng Anh, bạn sẽ nhanh chóng thấy mình bị cuốn vào thế giới lập dị tuyệt vời của mã hóa UTF-8

Một mồi nhanh UTF-8


Unicode là một tiêu chuẩn công nghiệp điện toán được sử dụng rộng rãi, xác định ánh xạ toàn diện các giá trị mã số duy nhất tới các ký tự trong hầu hết các bộ ký tự viết ngày nay để hỗ trợ khả năng tương tác hệ thống và trao đổi dữ liệu.

UTF-8 là mã hóa có độ rộng thay đổi có thể đại diện cho mọi ký tự trong bộ ký tự Unicode. Nó được thiết kế để tương thích ngược với ASCII và để tránh sự phức tạp về tuổi thọ và dấu thứ tự byte trong UTF-16 và UTF-32. UTF-8 đã trở thành mã hóa ký tự thống trị cho World Wide Web, chiếm hơn một nửa số trang Web.

UTF-8 mã hóa từng ký tự bằng một đến bốn byte. 128 ký tự đầu tiên của Unicode tương ứng 1-1 với ASCII, làm cho văn bản ASCII hợp lệ cũng là văn bản được mã hóa UTF-8 hợp lệ. Chính vì lý do này mà các hệ thống bị giới hạn sử dụng bộ ký tự tiếng Anh được cách ly khỏi sự phức tạp có thể phát sinh với UTF-8.

Ví dụ: mã thập lục phân Unicode cho chữ A là U+0041, mã này trong UTF-8 được mã hóa đơn giản bằng byte đơn 41. Để so sánh, mã thập lục phân Unicode cho ký tự
Bộ ký tự tốt nhất cho MySQL là gì?
là U+233B4, ở dạng UTF-8 được mã hóa bằng bốn byte F0 A3 8E B4.

Trong một công việc trước đây, chúng tôi bắt đầu gặp sự cố mã hóa dữ liệu khi hiển thị tiểu sử của các nghệ sĩ từ khắp nơi trên thế giới. Rõ ràng là có vấn đề với dữ liệu được lưu trữ, vì đôi khi dữ liệu được mã hóa chính xác và đôi khi thì không.

Điều này khiến các lập trình viên triển khai một loạt các bản vá lỗi, đôi khi bằng JavaScript, đôi khi bằng thẻ meta bộ ký tự HTML, đôi khi bằng PHP, v.v. Ngay sau đó, chúng tôi đã có được danh sách 600.000 tiểu sử nghệ sĩ với thông tin được mã hóa hai hoặc ba lần, với dữ liệu được lưu trữ theo nhiều cách khác nhau tùy thuộc vào người đã lập trình tính năng hoặc triển khai bản vá. Tổ chuột kỹ thuật cổ điển

Thật vậy, điều hướng qua các vấn đề về mã hóa dữ liệu UTF-8 có thể là một trải nghiệm khó chịu và sởn tóc gáy. Bài đăng này cung cấp một cuốn sách dạy nấu ăn ngắn gọn để giải quyết các vấn đề UTF-8 này khi làm việc với PHP và MySQL nói riêng, dựa trên kinh nghiệm thực tế và bài học kinh nghiệm (và một phần nhờ vào thông tin được khám phá tại đây và tại đây trong quá trình thực hiện)

Data encoding with UTF-8 unicode for PHP and MySQL makes complex languages simple.

Cụ thể, chúng tôi sẽ đề cập đến những điều sau đây trong bài đăng này

  • Các bản sửa đổi bạn sẽ cần tạo cho tệp
      
    
    8 và mã PHP của mình
  • Các bản sửa đổi bạn cần tạo cho tệp
      
    
    9 của mình và các vấn đề khác liên quan đến MySQL cần lưu ý (bao gồm các bản sửa đổi cấu hình cần thiết nếu bạn đang sử dụng Sphinx)
  • Cách di chuyển dữ liệu từ cơ sở dữ liệu MySQL được mã hóa trước đó bằng latin1 để thay vào đó sử dụng mã hóa UTF-8

Mã hóa PHP UTF-8 – sửa đổi php của bạn. tập tin ini

Điều đầu tiên bạn cần làm là sửa đổi tệp

  
8 của mình để sử dụng UTF-8 làm bộ ký tự mặc định

	default_charset = "utf-8";

(Ghi chú. Sau đó, bạn có thể sử dụng

  function utf8_for_xml($string)
  {
    return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                        ' ', $string);
  }
1 để xác minh rằng điều này đã được đặt đúng cách. )

OK, vậy bây giờ PHP và UTF-8 sẽ hoạt động tốt với nhau. Đúng?

Không hẳn là chính xác lắm. Trên thực tế, thậm chí không gần

Mặc dù thay đổi này sẽ đảm bảo rằng PHP luôn xuất ra UTF-8 dưới dạng mã hóa ký tự (trong tiêu đề kiểu Nội dung phản hồi của trình duyệt), bạn vẫn cần thực hiện một số sửa đổi đối với mã PHP của mình để đảm bảo rằng nó xử lý và tạo đúng UTF-

Có liên quan. Các mẹo và phương pháp hay nhất về PHP của các nhà phát triển Toptal

Mã hóa PHP UTF-8 – sửa đổi mã của bạn

Để chắc chắn rằng mã PHP của bạn hoạt động tốt trong hộp cát mã hóa dữ liệu UTF-8, đây là những điều bạn cần làm

  • Đặt UTF-8 làm bộ ký tự cho tất cả các tiêu đề được xuất ra bằng mã PHP của bạn

    Trong mọi tiêu đề đầu ra PHP, hãy chỉ định UTF-8 làm mã hóa

      header('Content-Type: text/html; charset=utf-8');
    
  • Chỉ định UTF-8 làm loại mã hóa cho XML

      
    
  • Loại bỏ các ký tự không được hỗ trợ khỏi XML

    Vì không phải tất cả các ký tự UTF-8 đều được chấp nhận trong tài liệu XML, nên bạn cần loại bỏ bất kỳ ký tự nào như vậy khỏi bất kỳ XML nào mà bạn tạo. Một chức năng hữu ích để làm điều này (mà tôi tìm thấy ở đây) là như sau

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    

    Đây là cách bạn có thể sử dụng chức năng này trong mã của mình

    ________số 8
  • Chỉ định UTF-8 làm bộ ký tự cho tất cả nội dung HTML

    Đối với nội dung HTML, hãy chỉ định UTF-8 làm mã hóa

      
    

    Trong biểu mẫu HTML, hãy chỉ định UTF-8 làm mã hóa

      
    
    0
  • Chỉ định UTF-8 làm mã hóa trong tất cả lệnh gọi tới

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    2

    e. g

      
    
    2

    *Ghi chú. Kể từ PHP 5. 6. 0, giá trị

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    3 được sử dụng làm giá trị mặc định. Từ PHP5. 4. 0, UTF-8 là mặc định, nhưng trước PHP 5. 4. 0, ISO-8859-1 được sử dụng làm mặc định. Do đó, bạn nên luôn chỉ định rõ ràng UTF-8 là an toàn, mặc dù đối số này là tùy chọn về mặt kỹ thuật

    Cũng lưu ý rằng, đối với UTF-8,

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    2 và
      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    5 có thể được sử dụng thay thế cho nhau

  • Đặt UTF-8 làm bộ ký tự mặc định cho tất cả các kết nối MySQL

    Chỉ định UTF-8 làm bộ ký tự mặc định để sử dụng khi trao đổi dữ liệu với cơ sở dữ liệu MySQL bằng cách sử dụng

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    6

      
    
    7

    Lưu ý rằng, kể từ PHP 5. 5. 0,

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    6 không được dùng nữa và thay vào đó nên sử dụng
      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    8

      
    
    0
  • Luôn sử dụng các phiên bản tương thích với UTF-8 của các hàm thao tác chuỗi

    Có một số hàm PHP sẽ bị lỗi hoặc ít nhất là không hoạt động như mong đợi, nếu biểu diễn ký tự cần nhiều hơn 1 byte (như UTF-8). Một ví dụ là hàm

      function utf8_for_xml($string)
      {
        return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                            ' ', $string);
      }
    
    9 sẽ trả về số byte thay vì số ký tự

    Hai tùy chọn có sẵn để giải quyết vấn đề này

    • Các hàm

        $safeString = utf8_for_xml($yourUnsafeString);  
      
      0 có sẵn theo mặc định với PHP cung cấp các phiên bản tương thích nhiều byte của nhiều hàm này (e. g. ,
        $safeString = utf8_for_xml($yourUnsafeString);  
      
      1, v.v. ). Tuy nhiên, hãy nhớ rằng bản thân các chuỗi bạn cung cấp cho các chức năng này phải được mã hóa chính xác

    • Ngoài ra còn có tiện ích mở rộng

        $safeString = utf8_for_xml($yourUnsafeString);  
      
      2 cho PHP (thông tin về cách bật và định cấu hình tiện ích mở rộng này có tại đây). Tiện ích mở rộng này cung cấp một tập hợp toàn diện các chức năng giải thích chính xác cho mã hóa nhiều byte

MySQL UTF-8 Encoding – sửa đổi đối với my của bạn. tập tin ini

Về phía MySQL/UTF-8, các sửa đổi đối với tệp

  
9 được yêu cầu như sau

  • Đặt các tham số cấu hình sau sau mỗi thẻ tương ứng

      header('Content-Type: text/html; charset=utf-8');
    
    0
  • Sau khi thực hiện các thay đổi ở trên đối với tệp

      
    
    9 của bạn, hãy khởi động lại trình nền MySQL của bạn

  • Để xác minh rằng mọi thứ đã được đặt đúng để sử dụng mã hóa UTF-8, hãy thực hiện truy vấn sau

      header('Content-Type: text/html; charset=utf-8');
    
    1

    Đầu ra sẽ trông giống như

      header('Content-Type: text/html; charset=utf-8');
    
    2

    Thay vào đó, nếu bạn thấy

      $safeString = utf8_for_xml($yourUnsafeString);  
    
    5 được liệt kê cho bất kỳ thứ nào trong số này, hãy kiểm tra kỹ cấu hình của bạn và đảm bảo rằng bạn đã khởi động lại daemon mysql của mình đúng cách

MySQL UTF-8 Encoding – những thứ khác cần xem xét

  • MySQL UTF-8 thực sự là một triển khai một phần của bộ ký tự UTF-8 đầy đủ. Cụ thể, mã hóa MySQL UTF-8 sử dụng tối đa 3 byte, trong khi 4 byte được yêu cầu để mã hóa bộ ký tự UTF-8 đầy đủ. Điều này tốt cho tất cả các ký tự ngôn ngữ, nhưng nếu bạn cần hỗ trợ các ký hiệu astral (có các điểm mã nằm trong khoảng từ U+010000 đến U+10FFFF), thì những ký tự đó yêu cầu mã hóa bốn byte không được hỗ trợ trong MySQL UTF-8. Trong MySQL5. 5. 3, điều này đã được giải quyết bằng việc bổ sung hỗ trợ cho bộ ký tự utf8mb4 sử dụng tối đa bốn byte cho mỗi ký tự và do đó hỗ trợ bộ ký tự UTF-8 đầy đủ. Vì vậy, nếu bạn đang sử dụng MySQL 5. 5. 3 trở lên, hãy sử dụng

      $safeString = utf8_for_xml($yourUnsafeString);  
    
    6 thay vì UTF-8 làm bộ ký tự cơ sở dữ liệu/bảng/hàng của bạn. Thông tin thêm có sẵn ở đây

  • Nếu máy khách đang kết nối không có cách nào chỉ định mã hóa cho giao tiếp của nó với MySQL, thì sau khi kết nối được thiết lập, bạn có thể phải chạy lệnh/truy vấn sau

      header('Content-Type: text/html; charset=utf-8');
    
    3
  • Khi xác định kích thước của các trường varchar khi lập mô hình cơ sở dữ liệu, đừng quên rằng các ký tự UTF-8 có thể yêu cầu tới 4 byte cho mỗi ký tự

MySQL UTF-8 Encoding – nếu bạn sử dụng Sphinx

  • Trong tệp cấu hình Sphinx của bạn (i. e. ,

      $safeString = utf8_for_xml($yourUnsafeString);  
    
    7)

    • Đặt định nghĩa chỉ mục của bạn để có

        header('Content-Type: text/html; charset=utf-8');
      
      4
    • Thêm phần sau vào định nghĩa nguồn của bạn

        header('Content-Type: text/html; charset=utf-8');
      
      5
  • Khởi động lại động cơ và làm lại tất cả các chỉ số

  • Nếu bạn muốn định cấu hình sphinx sao cho các chữ cái như C c Ć ć Ĉ ĉ Ċ ċ Č č đều được coi là tương đương cho mục đích tìm kiếm, bạn sẽ cần định cấu hình

      $safeString = utf8_for_xml($yourUnsafeString);  
    
    8 (a. k. a. gấp ký tự) về cơ bản là ánh xạ tương đương giữa các ký tự. Thêm thông tin có sẵn ở đây

Di chuyển dữ liệu cơ sở dữ liệu đã được mã hóa bằng latin1 sang UTF-8

Nếu bạn có cơ sở dữ liệu MySQL hiện có đã được mã hóa bằng latin1, đây là cách chuyển đổi latin1 thành UTF-8

  1. Đảm bảo rằng bạn đã thực hiện tất cả các sửa đổi đối với cài đặt cấu hình trong tệp

      
    
    9 của mình, như được mô tả ở trên

  2. Thực hiện lệnh sau

      header('Content-Type: text/html; charset=utf-8');
    
    6
  3. Thông qua dòng lệnh, xác minh rằng mọi thứ được đặt đúng thành UTF-8

      header('Content-Type: text/html; charset=utf-8');
    
    7
  4. Tạo tệp kết xuất với mã hóa latin1 cho bảng bạn muốn chuyển đổi

      header('Content-Type: text/html; charset=utf-8');
    
    8

    e. g

      header('Content-Type: text/html; charset=utf-8');
    
    9
  5. Thực hiện tìm kiếm toàn cầu và thay thế bộ ký tự trong tệp kết xuất từ ​​latin1 sang UTF-8

    e. g. , sử dụng Perl

      
    
    0

    Lưu ý cho người dùng Windows. Việc thay thế chuỗi ký tự này (từ latin1 sang UTF-8) cũng có thể được thực hiện bằng cách sử dụng tính năng tìm và thay thế trong WordPad (hoặc một số trình soạn thảo văn bản khác, chẳng hạn như vim). Hãy chắc chắn lưu tệp giống như vậy (không lưu tệp dưới dạng tệp unicode txt. )

  6. Từ thời điểm này, chúng tôi sẽ bắt đầu xử lý dữ liệu cơ sở dữ liệu, vì vậy có thể nên sao lưu cơ sở dữ liệu nếu bạn chưa làm như vậy. Sau đó, khôi phục kết xuất vào cơ sở dữ liệu

      
    
    1
  7. Tìm kiếm bất kỳ bản ghi nào có thể không được chuyển đổi đúng cách và sửa chúng. Vì các ký tự không phải ASCII được thiết kế nhiều byte, nên chúng ta có thể tìm thấy chúng bằng cách so sánh độ dài byte với độ dài ký tự (i. e. , để xác định các hàng có thể chứa các ký tự UTF-8 được mã hóa kép cần được sửa)

    • Xem liệu có bất kỳ bản ghi nào có ký tự nhiều byte không (nếu truy vấn này trả về 0, thì có vẻ như không có bất kỳ bản ghi nào có ký tự nhiều byte trong bảng của bạn và bạn có thể chuyển sang Bước 8)

        
      
      2
    • Sao chép các hàng có ký tự nhiều byte vào một bảng tạm thời

        
      
      3
    • Chuyển đổi các ký tự UTF-8 được mã hóa kép thành các ký tự UTF-8 thích hợp

      Điều này thực sự là một chút khó khăn. Chuỗi được mã hóa kép là chuỗi được mã hóa chính xác dưới dạng UTF-8. Tuy nhiên, MySQL sau đó đã sai lầm khi chuyển đổi nó (từ cái mà nó nghĩ là latin1) sang UTF-8 một lần nữa, khi chúng tôi đặt cột thành mã hóa UTF-8. Do đó, việc giải quyết vấn đề này đòi hỏi một quy trình gồm hai bước, qua đó chúng tôi “đánh lừa” MySQL để ngăn không cho nó thực hiện “ưu ái” này cho chúng tôi

      Đầu tiên, chúng tôi đặt loại mã hóa cho cột trở lại latin1, do đó loại bỏ mã hóa kép

      e. g

        
      
      4

      Ghi chú. Đảm bảo sử dụng đúng loại trường cho bảng của bạn. Trong ví dụ trên, đối với bảng của chúng tôi, loại trường chính xác cho 'ArtistName' là varchar(128), nhưng trường trong bảng của bạn có thể là văn bản hoặc bất kỳ loại nào khác. Hãy chắc chắn để chỉ định nó đúng

      Vấn đề là bây giờ, nếu chúng tôi đặt mã hóa cột trở lại UTF-8, MySQL sẽ chạy lại mã hóa dữ liệu latin1 thành UTF-8 cho chúng tôi và chúng tôi sẽ quay lại nơi chúng tôi bắt đầu. Để tránh điều này, chúng tôi thay đổi loại cột thành blob và SAU ĐÓ chúng tôi đặt nó thành UTF-8. Điều này khai thác thực tế là MySQL sẽ không cố mã hóa một đốm màu. Do đó, chúng tôi có thể "đánh lừa" chuyển đổi bộ ký tự MySQL để tránh sự cố mã hóa kép

      e. g

        
      
      5

      (Một lần nữa, như đã lưu ý ở trên, hãy đảm bảo sử dụng loại trường thích hợp cho bảng của bạn. )

    • Xóa các hàng chỉ có các ký tự byte đơn khỏi bảng tạm thời

        
      
      6
    • Chèn lại các hàng đã sửa trở lại bảng ban đầu (trước khi thực hiện việc này, bạn có thể muốn chạy một số lựa chọn trên bảng tạm để xác minh rằng nó có vẻ đã được sửa đúng cách, giống như kiểm tra độ chính xác)

        
      
      7
  8. Xác minh dữ liệu còn lại và, nếu cần, lặp lại quy trình ở bước 7 (ví dụ: điều này có thể cần thiết nếu dữ liệu được mã hóa ba lần). Các lỗi khác, nếu có, có thể dễ dàng giải quyết thủ công nhất

Mã nguồn và tệp tài nguyên

Một điều khác cần ghi nhớ và xác minh là các tệp mã nguồn, tệp tài nguyên, v.v. của bạn đều được lưu đúng cách với mã hóa dữ liệu UTF-8. Mặt khác, bất kỳ ký tự "đặc biệt" nào trong các tệp này có thể không được xử lý chính xác

Ví dụ: trong Netbeans, bạn có thể nhấp chuột phải vào dự án của mình, chọn thuộc tính và sau đó trong “Nguồn”, bạn sẽ tìm thấy tùy chọn mã hóa dữ liệu (tùy chọn này thường được mặc định là UTF-8, nhưng đáng để kiểm tra)

Hoặc trong Windows Notepad, sử dụng tùy chọn “Lưu dưới dạng…” trong menu Tệp và chọn tùy chọn mã hóa UTF-8 ở cuối hộp thoại. (Lưu ý rằng tùy chọn “Unicode” mà Notepad cung cấp thực sự là UTF-16, vì vậy đó không phải là điều bạn muốn. )

Gói (lại

Mặc dù nó có thể hơi tẻ nhạt, nhưng việc dành thời gian thực hiện các bước này để giải quyết một cách có hệ thống các vấn đề về mã hóa dữ liệu UTF-8 của MySQL và PHP cuối cùng có thể giúp bạn tiết kiệm rất nhiều thời gian và sự phiền muộn. Về lâu dài, cách tiếp cận có phương pháp này vượt trội hơn nhiều so với xu hướng quá phổ biến là chỉ tiếp tục vá hệ thống

Hướng dẫn này hy vọng nhấn mạnh tầm quan trọng của việc xem xét định nghĩa bộ ký tự khi thiết lập môi trường dự án ngay từ đầu và làm việc trong môi trường dự án phần mềm giải thích đúng cách mã hóa ký tự trong thao tác văn bản và chuỗi.

Đọc thêm trên Blog Kỹ thuật Toptal

  • Lỗi mã PHP. 10 lỗi phổ biến nhất mà các nhà phát triển PHP mắc phải
  • Giới thiệu về PHP 7. Có gì mới và những gì đã qua
  • Cách xây dựng một ứng dụng đa ngôn ngữ. Bản trình diễn với PHP và Gettext
  • Xác thực người dùng đầy đủ và kiểm soát truy cập. Hướng dẫn Laravel Passport, Pt. 1
  • Xây dựng ứng dụng email khách IMAP bằng PHP

Hiểu những điều cơ bản

Bộ ký tự UTF-8 là gì?

Được xác định theo tiêu chuẩn Unicode, UTF-8 là mã hóa ký tự 8-bit có khả năng lưu trữ một ký tự Unicode. Nó tương thích ngược với ASCII

UTF-8 có nghĩa là gì?

UTF là viết tắt của Unicode Transformation Format, trong khi hậu tố “8” biểu thị việc sử dụng các khối 8 bit để biểu diễn các ký tự

Làm cách nào để chèn các ký tự Unicode trong MySQL bằng PHP?

Để chèn các ký tự Unicode trong MySQL, bạn cần tạo một bảng có hỗ trợ Unicode, chọn cài đặt mã hóa/đối chiếu thích hợp và chỉ định bộ ký tự trong kết nối MySQL. Sau đó, bạn có thể tiếp tục và sử dụng mã PHP để chèn Unicode theo ý muốn

Thẻ

MySQLPHPUTF8Unicode

Người làm việc tự do? Tìm công việc tiếp theo của bạn.

Việc làm Lập trình viên PHP

Xem thông tin đầy đủ

Francisco Claria

Kỹ sư phần mềm

Giới thiệu về tác giả

Francisco là một kỹ sư full-stack hiện đang tập trung vào các ứng dụng lai (Ionic/Cordova), người có nhiều kinh nghiệm về các giải pháp sáng tạo, Arduino, API/REST back-end, hệ thống thao tác dữ liệu phân tán, ứng dụng web và UI/UX. Anh ấy luôn tập trung cao độ vào tính bền vững và hiệu suất trong công việc cũng như trong các sản phẩm mà anh ấy phát triển

UTF nào

MySQL hỗ trợ nhiều bộ ký tự Unicode. utf8mb4. Mã hóa UTF-8 của bộ ký tự Unicode sử dụng một đến bốn byte cho mỗi ký tự. utf8mb3. Mã hóa UTF-8 của bộ ký tự Unicode sử dụng một đến ba byte cho mỗi ký tự . Bộ ký tự này không được dùng trong MySQL 8. 0 và bạn nên sử dụng utfmb4 để thay thế.

Tôi nên sử dụng utf8mb4 hay UTF

Sự khác biệt giữa utf8 và utf8mb4 là cái trước chỉ có thể lưu ký tự 3 byte, trong khi cái sau có thể lưu ký tự 4 byte. Theo thuật ngữ Unicode, utf8 chỉ có thể lưu trữ các ký tự trong Mặt phẳng đa ngôn ngữ cơ bản, trong khi utf8mb4 có thể lưu trữ bất kỳ ký tự Unicode nào .

Bộ ký tự mặc định trong MySQL là gì?

Bộ ký tự và đối chiếu mặc định của máy chủ MySQL là latin1 và latin1_swedish_ci , nhưng bạn có thể chỉ định các bộ ký tự tại máy chủ, cơ sở dữ liệu, bảng, .

Tôi nên sử dụng bộ ký tự nào?

Là tác giả hoặc nhà phát triển nội dung, ngày nay, bạn nên luôn chọn mã hóa ký tự UTF-8 cho nội dung hoặc dữ liệu của mình. Mã hóa Unicode này là một lựa chọn tốt vì bạn có thể sử dụng một mã hóa ký tự duy nhất để xử lý bất kỳ ký tự nào mà bạn có thể cần. Điều này rất đơn giản hóa mọi thứ.