Tôi chỉ đơn giản đoán rằng bạn đang đặt bảng thành utf8mb4
, nhưng mã hóa kết nối của bạn được đặt thành utf8
. Bạn phải đặt nó thành utf8mb4
cũng như, nếu không MySQL sẽ chuyển đổi utf8mb4
được lưu trữ dữ liệu tới utf8
, cái sau không thể mã hóa các ký tự Unicode "cao". (Đúng, đó là kiểu riêng của MySQL.)
Trên một kết nối MySQL thô, nó sẽ phải trông như thế này:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Bạn sẽ phải điều chỉnh điều đó theo cách tốt nhất của ứng dụng khách, tùy thuộc vào cách bạn kết nối với MySQL từ PHP (mysql, mysqli hoặc PDO).
Để thực sự làm rõ (vâng, sử dụng mysql_
vì đơn giản, đừng làm điều đó ở nhà):
mysql_connect(...);
mysql_select_db(...);
mysql_set_charset('utf8mb4'); // adapt to your mysql connector of choice
$r = mysql_query('SELECT * FROM `my_table`');
var_dump(mysql_fetch_assoc($r)); // data will be UTF8 encoded