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

Cách phát hiện các ký tự UTF-8 trong cột được mã hóa Latin1 - MySQL

Mã hóa ký tự, chẳng hạn như múi giờ, là một nguồn thường xuyên của các vấn đề.

Những gì bạn có thể làm là tìm kiếm bất kỳ ký tự "ASCII cao" nào vì đây là ký tự hoặc ký hiệu có dấu LATIN1 hoặc ký tự đầu tiên của ký tự nhiều byte UTF-8. Nói ra sự khác biệt sẽ không dễ dàng trừ khi bạn gian lận một chút.

Để tìm ra cách mã hóa nào là chính xác, bạn chỉ cần SELECT hai phiên bản khác nhau và so sánh trực quan. Đây là một ví dụ:

SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, 
       CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 
FROM users 
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')

Điều này được thực hiện phức tạp bất thường bởi vì MySQL regexp engine dường như bỏ qua những thứ như \x80 và làm cho nó cần thiết để sử dụng UNHEX() thay vào đó.

Điều này tạo ra kết quả như sau:

latin1                utf8
----------------------------------------
Björn                Björn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chuyển đổi kết quả Truy vấn SQL sang Cấu trúc Dữ liệu PANDAS?

  2. Cách hiển thị ngày tháng ở định dạng iso 8601 với PHP

  3. Ghi nhật ký tất cả các truy vấn trong mysql

  4. Nó được phát âm là “S-Q-L” hay “Phần tiếp theo”?

  5. MySQL truy xuất biến từ Thủ tục được lưu trữ trong PHP PDO