mysql 5.5 之前,utf8 編碼只支援1-3個位元組,只支援bmp這部分的unicode編碼區,bmp是從哪到哪?
基本就是 0000 ~ ffff 這一區。
從mysql 5.5 開始,可支援4個位元組utf編碼utf8mb4,乙個字元最多能有4位元組,所以能支援更多的字符集。
utf8mb4 is a superset of utf8
tf8mb4相容utf8,且比utf8能表示更多的字元。
至於什麼時候用,看你做的什麼專案了。。。
在做移動應用時,會遇到ios使用者在文字的區域輸入emoji表情,如果不做一定處理,就會導致插入資料庫異常。
mysql 5.0 以上的版本:
1、乙個漢字佔多少長度與編碼有關:
utf-8:乙個漢字 = 3個位元組,英文是乙個位元組
gbk: 乙個漢字 = 2個位元組,英文是乙個位元組
2、varchar(n) 表示n個字元,無論漢字和英文,mysql都能存入 n 個字元,僅實際位元組長度有所區別。
3、mysql檢查長度,可用sql語言 select length(fieldname) from tablename 這個命令可以看到各行使用的位元組數。
mysql版本5.6.32-78.0下面用實際例子來說明問題:
1. 首先建立一張臨時用表:
createtemporary
table
medivac(
name
varchar(10
)); charset
=utf8mb4 collate=utf8mb4_unicode_ci
2. 插入一些資料:
insertinto medivac (name) values ('' at line 1
mysql
>
insert
into medivac (name) values ('a'
);query ok,
1 row affected (0.00
sec)
mysql
>
insert
into medivac (name) values ('哈'
);query ok,
1 row affected (0.00
sec)
mysql
>
insert
into medivac (name) values ('
\u+1f604');
query ok,
1 row affected (0.00
sec)
mysql
>
insert
into medivac (name) values ('
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈');
query ok,
1 row affected, 1 warning (0.00 sec)
3. 檢視表中資料:
mysql>select
*from
medivac
->;+
--------------------------------+
| name |+--
------------------------------+
| a |
| 哈 |
|
oracle漢字占用位元組長度
1 今天調查乙個oracle資料庫問題的時候,發現在11g中乙個漢字佔2個位元組,在10g中佔3個位元組,導致將11g資料庫中的資料匯入到10g的時候總是出錯,開始的時候還以為是11g和10g的版本不一樣,漢字占用位元組數不一樣,後來一想,oracle不會這麼幹吧,那樣差別也太大了,後來一調查,發現...
Oracle 漢字占用位元組數
在oracle中乙個字元特別是中文字元佔幾個位元組是與字符集有關的。比如gbk,漢字就會佔兩個位元組,英文1個 如果是utf 8,漢字一般佔3個位元組,英文還是1個。但是一般情況下,我們都認為是兩個位元組處理,因為oracle安裝時候預設我們都選擇gbk的編碼格式,但是我們在頁面做輸入字串長度的校驗...
yii2 oracle漢字占用位元組長度
ocistmtexecute ora 12899 value too large for column wsg wx enter taste gender actual 3,maximum 2 今天調查乙個oracle資料庫問題的時候,發現在11g中乙個漢字佔2個位元組,在10g中佔3個位元組,導致...