Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mySQL - đối sánh đầu vào biểu mẫu latin (tiếng Anh) với dữ liệu utf8 (không phải tiếng Anh)

Một giải pháp khả thi là tạo một cột khác trong cơ sở dữ liệu bên cạnh "artist", chẳng hạn như "artist_normalized". Tại đây, trong khi điền bảng, bạn có thể chèn phiên bản "chuẩn hóa" của chuỗi. Sau đó, tìm kiếm có thể được thực hiện đối với cột artist_normalized.

Mã thử nghiệm:

<?php
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
$test = ['abcd', 'èe', '€', 'àòùìéëü', 'àòùìéëü', 'tiësto'];
foreach($test as $e) {
    $normalized = $transliterator->transliterate($e);
    echo $e. ' --> '.$normalized."\n";
}
?>

Kết quả:

abcd --> abcd
èe --> ee
€ --> €
àòùìéëü --> aouieeu
àòùìéëü --> aouieeu
tiësto --> tiesto

Phép thuật được thực hiện bởi lớp Transliterator. Quy tắc được chỉ định thực hiện ba hành động:phân rã chuỗi, loại bỏ dấu phụ và sau đó biên dịch lại chuỗi, được chuẩn hóa. và đáng tin cậy.

Lưu ý:giải pháp này yêu cầu PHP 5.4 trở lên với intl phần mở rộng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao LEFT JOIN của MySQL trả về bản ghi NULL khi với mệnh đề WHERE?

  2. Trong MySQL, tôi có thể sao chép một hàng để chèn vào cùng một bảng không?

  3. Sự khác biệt về thời gian cần thiết để chèn các bản ghi InnoDB / MyISAM

  4. Đối số được cung cấp không hợp lệ cho foreach () trong Codeigniter

  5. mysql_num_rows () mong muốn tham số 1 là tài nguyên, boolean đã cho