1. 程式人生 > >總結專案中不支援emoji表情的問題的解決方法

總結專案中不支援emoji表情的問題的解決方法

最近財神圈專案整合微信登入功能的過程中,當儲存使用者有暱稱含有表情符號時後臺服務丟擲異常,原來是資料庫預設字符集不支援emoji表情字元。找到問題的原因後,因為之前也沒有遇到過這樣的問題,也沒思路,迅速百度大神找了一大堆資料來,原來僅只要將資料庫及相關的表和表字段設定為utfmb84即支援emoji表情的。

問題的原因是資料庫中使用的字元編碼為UTF-8,這種編碼有可能是兩個、三個、四個位元組。Emoji表情是4個位元組,而mysql的utf8編碼最多3個位元組,所以資料插不進去,而utfmb64是支援四個位元組的。所以解決方案就是:將mysql編碼從utf8轉換成utf8mb4。

現將解決的思路和步驟分享一下,為了改過之前寫文章過於草率,儘量將所找的資料和我的實戰經驗寫得完整一下以示尊重讀者。

1,檢測你的資料庫版本,資料庫版本需>=5.5.3版本.

如何察看mysql版本如下圖,我安裝的是mysql下的一個開源分支mariadb,版本10.0對應的是mysql版本5.6以上,所以是支援的。


2,如果你的mysql服務正在啟動中,請右擊我的電腦-管理-服務,關閉mysql server這個服務。

3,設定資料庫預設支援字符集utf8mb4,

找到mysql安裝目錄下的my.cnf或者mysql.ini,修改my.cnf或mysql.ini

[client]
 default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]
 character-set-client-handshake = FALSE
 character-set-server = utf8mb4
 collation-server = utf8mb4_unicode_ci
 init_connect='SET NAMES utf8mb4'

4,重啟mysql server

檢查字符集

mysq>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';


 5,存在的資料庫的字符集是utf8的,如果要支援utf8mb64則需要將已經存在的資料庫、表、表字段型別修改成支援utf8mb64.

修改資料庫字符集:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改表的字符集:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改欄位的字符集:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

6,這步可有可無,前提是如果使用到 spring boot的連線池,請在spring boot 的配置檔案application.properties設定連線使用utf8mb64

spring.mysql.datasource.init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

7,設定連線驅動的JDBC_URL

修改如jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
這裡請注意如果資料庫版本大於5.1.13驅動程式connector不能加characterEncoding=utf8,一定要去掉characterEncoding=utf8。

以上步驟測試過很多表的相關欄位均都完美解決。

附上我的測試效果圖



相關推薦

總結專案支援emoji表情的問題的解決方法

最近財神圈專案整合微信登入功能的過程中,當儲存使用者有暱稱含有表情符號時後臺服務丟擲異常,原來是資料庫預設字符集不支援emoji表情字元。找到問題的原因後,因為之前也沒有遇到過這樣的問題,也沒思路,迅速百度大神找了一大堆資料來,原來僅只要將資料庫及相關的表和表字段設定為ut

關於vue專案在低版本瀏覽器支援ES6的解決方案

原因:低版本瀏覽器核心版本太低,無法解析 ES2015最新的一些語法。 babel是一個轉譯器,把同種語言的高版本規則翻譯成低版本規則 一般搭建專案時webpack會在最外層配置一個.babelrc檔案用於預設解析ES2015(es6)中的特殊語法(例如: le

總結eclipse無端報錯和專案出現知道的錯誤-解決方法

--下列文章是個人在網上找到的資料,幫助和我一樣遇到問題的朋友們解決問題的,如有侵權的可以聯絡我刪除本篇文章哈,在下面留言我就會刪除 的,歡迎一起學習java的朋友關注我一起學習***!!-- 重要提示:            有些同學本來專案是好的或者新導下來沒問題的專

Missing artifact com.oracle:ojdbc6:jar:11.2.0.3 Maven能引入ojdbc解決方法

今天在建立Maven專案的時候出現了一個問題,在POM檔案的overview窗口出現**Missing artifact com.oracle:ojdbc6:jar:11.2.0.3。**提示,著實不知道是啥情況。 在網上找了半天資料才知道,原來objdc6.j

PHP支援過載的解決方法

PHP不支援函式的過載,以後也不會支援在OOP中,函式的過載有兩個條件1、引數的個數不同——PHP支援引數預設,無法用引數個數區別2、引數的型別不同——PHP是弱型別語言,會根據上下文自動做型別轉換所以,PHP不可能支援函式的過載

Mono環境下支援中文的解決方法

這是因為中文的程式碼支援包沒有安裝,啟動YaST安裝軟體,在“全部”組裡檢索mono-locale-extras關鍵字,選中mono-locale-extras後點擊Install,一路next就可以了。有依賴關係的軟體包會自動安裝。當你在mono網站下載安裝mono開發環境的時候,安裝軟體會自動在軟

專案遇到的問題與解決方法——持續新增

問題解決之前不會,學習解決了之後怕忘記。 純屬為了方便自己回頭看,學習那些曾經不會的。持續新增。 1.要匯入Excel,但是獲取到的數字是科學計數法,比如11001000獲取到的是1.01+E7 // 把科學計數轉換成常規數字 String s=

web專案的跨域問題解決方法

一種是JSONP 一種是 CORS。 在客戶端Javascript呼叫服務端介面的時候,如果需要支援跨域的話,需要服務端支援。 JSONP的方式就是服務端對返回的值進行回撥函式包裝,他的優點是支援眾多的瀏覽器, 缺點是僅支援Get的方式對服務端請求。 另一

iphone手機safari輸入法支援keyup事件解決方法

問題是這樣的,用input search做模糊搜尋的時候,在鍵盤裡面輸入關鍵詞,會通過ajax後臺查詢,然後返回資料,用input監聽鍵盤keyup事件,在安卓手機是可以的,但是在ios手機自帶的輸入法無效,經過查詢得出以下方法; 起初我想到的是使用 JQ 裡

WIN7上安裝sql2000出現的此係統支援的問題解決方法

Microsoft SQL Server 2000 Stadard Edition 伺服器元件在此作業系統上不受支援。只有客戶端元件才可用於安裝 ”的解決 有些系統在安裝Server SQL 2000的時候會遇見這樣的問題,說伺服器元件在此作業系統上不受支援。在安裝Se

HtmlAgilityPack HtmlWeb.Load() 支援 gzip 的解決方法

這幾天想做用現在比較流行的為雨澤漫畫重寫下采集的功能,看了一些 的介紹,感覺非常好用,還內建了htmlWeb用來http請求。但是發現有的開啟了gzip壓縮的網頁請求時會報錯。 原來的程式碼如下: 1 HtmlWeb webClient = new Htm

Android EventBus在Fragment起作用的解決方法

一、AndroidEventBus。 二、問題出現情形。 AndroidEventBus在Fragment中註冊,由其他地方向Fragment中post事件。 三、問題出現原因。 由其他地方向Fragment post事件的時候,Fragment還未初始化,也即And

服務支援 chkconfig 的解決方法

服務不支援 chkconfig 的解決方法 這兩天一直在研究系統服務,在chkconfig --add  servername的時候老是提示服務不支援 chkconfig 經過查詢,解決辦法如下。 示例,auto_run的前三行如下: #!/bin/sh

placeholder在瀏覽器ie9以下支援之一種解決方法

原地址:http://www.cnblogs.com/larennani/p/6839139.html <script type="text/javascript"> $(function(){ if(!placeholderSuppor

谷歌,火狐瀏覽器支援showModalDialog的解決方法

首先得知道window.showModalDialog()方法到底是幹嘛的,有什麼作用. 基本介紹:           showModalDialog()         (IE 4+ 支援)

TinyXML支援UNICODE的解決方法【改造TinyXML】

TinyXML目前僅直接支援解析UTF-8或者ASCII編碼的XML, 對於其它編碼必須經過轉換才能使用, 這給Windows專案帶來了麻煩, 頻繁的編碼轉換也可能給效能帶來巨大損失. 對此, 作者給出瞭解釋的是"UTF-8 is not a double byte fo

java web專案遇到的問題和解決方法

1.怎麼解決tomcat閃退 tomcat啟動批處理startup.bat最上邊加這兩句 SET JAVA_HOME=D:\Java\jdk1.8.0_101 SET TOMCAT_HOME=D:\Program Files\Apache Software Foundati

Android Studio支援AMD處理器 -- 解決方法

第一次安裝使用Android Studio出現問題,查了半天發現是因為我的電腦是AMD的,不支援inter 虛擬架構,所以執行ADV失敗。 解決方法是:再安裝一個別的虛擬機器Genymotion 就可以了。

FireFox支援InnerText的解決方法

FireFox不支援InnerText,這個問題上次碰到一個網盤資料大小顯示的時候不正常,一直顯示預設大小,在別的瀏覽器是正常的,想了半天才知道是FireFox不支援InnerText。 程式碼如下: $.get("api/userfile/userUs

eclipse安裝TestNG後在view顯示TestNG的解決方法

eclipse版本:luna 線上安裝testNG版本為6.13 安裝TestNG參考(此為TestNG在eclipse中的安裝):https://jingyan.baidu.com/article/bad08e1ee963fc09c85121e8.html 言歸正傳,