為什麼不要在MySQL中使用UTF 8編碼方式

2021-09-25 20:37:43 字數 754 閱讀 2629

mysql 從 4.1 版本開始支援 utf-8,也就是 2003 年,然而目前流行的utf-8 標準(rfc 3629)是在此之後規定的。正因此,才造就了mysql中的utf-8與我們日常開發中的utf-8不一致,從到導致了些問題。mysql的utf-8只支援每個字元最多三個位元組,而真正的 utf-8 是每個字元最多四個位元組。

有資料庫表如下:utf8編碼方式

往資料庫存一條記錄:

@test

public void testinsert()

這裡只是部分**,看不懂沒關係,這裡是給user表插入一條記錄。其中username是\ud83d\ude00 。

其實\ud83d\ude00是乙個emoji表情。

因為mysql中utf8字符集只支援三位元組utf-8編碼的unicode範圍,而emoji字元屬於四位元組編碼部分,所以程式執行預期是會報錯的。執行這段**:

與預期一致,報錯了。

雖然mysql的utf-8存在缺陷,但是mysql(包括mariadb)官方卻沒有修復此bug,而是通過2023年重新發布的「utf8mb4」來支援真正的 utf-8。因此想要解決此問題,只能夠將mysql資料庫設定為utf8mb4字符集才行。

這個問題,也是因為某次儲存資料的時候儲存了乙個emoji表情才發現的。其實最早開始用mysql的時候,就有發現乙個utf8mb4了,但是自己卻沒有卻去了解utf8和utf8mb4的區別。通過此次教訓,以後使用mysql就老老實實的設定字符集為utf8mb4吧。

不要在MySQL中使用「UTF 8」

mysql 從 4.1 版本開始支援 utf 8,也就是 2003 年,而今天使用的 utf 8 標準 rfc 3629 是隨後才出現的。舊版的 utf 8 標準 rfc 2279 最多支援每個字元 6 個位元組。2002 年 3 月 28 日,mysql 開發者在第乙個 mysql 4.1 預覽版...

不要在v for中使用v if

一 前言 以下 寫法,相信80 的初學者寫過,即使沒寫過,也應該見過!v for product in products key product.id v if product.price 50 li ul 使用 v if 來過濾 v for 迴圈的資料是乙個超級大錯誤!儘管這看起來很直觀,但它會導...

永遠不要在 MySQL 中使用 utf8

永遠不要在 mysql 中使用 utf8 最近我遇到了乙個 bug,我試著通過 rails 在以 utf8 編碼的 mariadb 中儲存乙個 utf 8 字串,然後出現了乙個離奇的錯誤 incorrect string value xf0 x9f x98 x83 for column summar...