原本以為utf8是萬能的了,新建數據庫時選擇了如下圖
然而,當往數據庫中插入的數據有特殊符號時,內容如下:
🌽玉米 🍒櫻桃
無情的報錯開始了。
原來歷史原因,mysql數據庫字符集utf8不是真正的utf8,是占用3個字節的.
現在,新建數據庫時要選擇utf8mb4,這才是真正的utf8,如下圖
另外,原來連接數據庫中
1 $conn=mysqli_connect("127.0.0.1","用戶名","密碼","test_db1"); 2 if (mysqli_connect_errno($conn)) { 3 echo "連接 MySQL 失敗: " . mysqli_connect_error(); 4 } 5 mysqli_query($conn,"SET NAMES utf8mb4");
SET NAMES utf8 改為 SET NAMES utf8mb4
實驗一下,插入數據庫正常
————————————————————
在 MySQL 數據庫中,存在多個與 Unicode 相關的字符集和排序規則。
一般情況下應該使用 utf8mb4
字符集,這才是 MySQL 中真正的UTF-8
編碼(如第一節所言,這里字符集和編碼又一次互指了)。相應的所謂 utf8
字符集是非標准的,其中單個字符最多只能編碼為 3 個字節,因此很多字符無法保存。
MySQL 中排序規則應該使用 utf8mb4_unicode_ci
,而不是 utf8mb4_general_ci
。后者性能稍微高於前者,但算法不符合 Unicode 標准,可能在處理某些語言文字時出現錯誤的結果。utf8mb4_unicode_ci
對應 Unicode v4.0,較新版本的 MySQL 還同時支持 v5.2(utf8mb4_unicode_520_ci
),v9.0(utf8mb4_0900_ai_ci
)。