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

Làm cách nào để truy vấn văn bản chứa các ký tự ngôn ngữ Châu Á trong MySQL?

Về lý thuyết, bạn có thể làm điều này:

  1. Tìm các dải unicode mà bạn muốn kiểm tra.
  2. Mã hóa phần đầu và phần cuối thành UTF-8 theo cách thủ công.
  3. Sử dụng byte đầu tiên của mỗi phần bắt đầu và kết thúc được mã hóa làm dải ô cho REGEXP.

Tôi tin rằng phạm vi CJK đủ xa so với những thứ như biểu tượng đồng euro, vì vậy các trường hợp dương tính giả và âm tính giả sẽ rất ít hoặc không có.

Chỉnh sửa: Bây giờ chúng tôi đã đưa lý thuyết vào thực hành!

Bước 1: Chọn phạm vi ký tự. Tôi đề nghị \ u3000- \ u9fff; dễ kiểm tra và sẽ cho chúng tôi kết quả gần như hoàn hảo.

Bước 2: Mã hóa thành từng byte. (trang Wikipedia utf-8)

Đối với phạm vi đã chọn của chúng tôi, các giá trị được mã hóa utf-8 sẽ luôn là 3 byte, giá trị đầu tiên là 1110xxxx, trong đó xxxx là bốn bit quan trọng nhất của giá trị unicode.

Do đó, chúng tôi muốn mach byte trong phạm vi 11100011 đến 11101001 hoặc 0xe3 đến 0xe9.

Bước 3: Tạo regexp của chúng tôi bằng cách sử dụng hàm UNHEX rất tiện dụng (và vừa được tôi phát hiện).

SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

Chỉ cần thử nó ra. Hoạt động như một sự quyến rũ. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn một hàng và các hàng xung quanh nó

  2. Lỗi khi tải Mô-đun MySQLdb và cài đặt pip MySQLdb

  3. Lưu id facebook dưới dạng int hoặc varchar?

  4. Sử dụng phương pháp trình tạo truy vấn Laravel whereIn () với truy vấn phụ

  5. nếu bảng không tồn tại, hãy thực hiện một truy vấn dài