使用MYSQL的時(shí)候經(jīng)常會(huì)遇到一個(gè)問(wèn)題,試著通過(guò) Rails 在以“utf8”編碼的 MariaDB 中保存一個(gè) UTF-8 字符串,然后出現(xiàn)了一個(gè)特別離奇的錯(cuò)誤:Incorrect string value: ‘xF0x9Fx98x83 <…’ for column ‘summary’ at row 1 UTF-8 編碼的客戶端,服務(wù)器也是 UTF-8 編碼的,數(shù)據(jù)庫(kù)也是,就連要保存的這個(gè)字符串“ <…”也是合法的 UTF-8。問(wèn)題的癥結(jié)在于,MySQL 的“utf8”實(shí)際上不是真正的 UTF-8。“utf8”只支持每個(gè)字符最多三個(gè)字節(jié),而真正的 UTF-8 是每個(gè)字符最多四個(gè)字節(jié)。原來(lái)MySQL 一直沒(méi)有修復(fù)這個(gè) bug,他們?cè)?2010 年發(fā)布了一個(gè)叫作“utf8mb4”的字符集,繞過(guò)了這個(gè)問(wèn)題。他們并沒(méi)有對(duì)這個(gè)新的字符集廣而告之,以致于現(xiàn)在網(wǎng)絡(luò)上仍然在建議開發(fā)者使用“utf8”,但是這些建議都是錯(cuò)誤的。簡(jiǎn)單概括如下:(1)MySQL 的“utf8mb4”是真正的“UTF-8”。(2)MySQL 的“utf8”只是一種“專屬的編碼”,它能夠編碼的 Unicode 字符并不多。尚品小編這里建議大家:使用“utf8”的 MySQL 和 MariaDB 的用戶都應(yīng)該改用“utf8mb4”,永遠(yuǎn)都不要再使用“utf8”。第一、什么是編碼?什么是 UTF-8?眾所周知,計(jì)算機(jī)儲(chǔ)存的實(shí)質(zhì)是二進(jìn)制,是使用 0 和 1 來(lái)存儲(chǔ)文本。比如字符“C”被存成“01000011”,那么計(jì)算機(jī)在顯示這個(gè)字符時(shí)需要經(jīng)過(guò)兩個(gè)步驟:
相對(duì)的:
聯(lián)系電話