之前我也遇到這樣的問題,具體原因是因為emoji表情大小為四個字節(jié),但一般的utf8編碼下的mysql只能存儲2到3個字節(jié),具體的解決辦法是把要存儲的emoji表情的那個字段類型改為longtext,要是不行把utf8編碼改為utf8mb4
為臨淄等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及臨淄網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、臨淄網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
我當時好像就是這么解決的,你試試
從
mysql
5.5.3
開始,mysql
支持一種
utf8mb4
的字符集,這個字符集能夠支持
4
字節(jié)的
utf8
編碼的字符。
utf8mb4
字符集能夠完美地向下兼容
utf8
字符串。在數(shù)據(jù)存儲方面,當一個普通中文字符存入數(shù)據(jù)庫時仍然占用
3
個字節(jié),在存入一個
unified
emoji
表情的時候,它會自動占用
4
個字節(jié)。所以在輸入輸出時都不會存在亂碼的問題了。由于
utf8mb4
是
utf8
的超集,從
utf8
升級到
utf8mb4
不會有任何問題,直接升級即可;如果從別的字符集如
gb2312
或者
gbk
轉(zhuǎn)化而來,一定要先備份數(shù)據(jù)庫。然后,修改
mysql
的配置文件
/etc/my.cnf,修改連接默認字符集為
utf8mb4
,然后在連接數(shù)據(jù)庫以后首先執(zhí)行一句
sql:
set
names
utf8mb4;。
1.
修改my.cnf
或
my.ini
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重啟mysql
登陸mysql,
show
variables
like
'character%';
可以查看編碼是否已經(jīng)修改成功。
2、修改數(shù)據(jù)庫和數(shù)據(jù)表為相應(yīng)的
utf8mb4
格式。
alter
table
table_name
convert
to
character
set
utf8mb4
collate
utf8mb4_bin;
3、在代碼中,連接數(shù)據(jù)庫成功后,執(zhí)行
"set
names
utf8mb4"
1、桌面上右擊 計算機,選擇“管理”, 選擇“服務(wù)和應(yīng)用程序”---“服務(wù)”, 在里面找到MySQL56的服務(wù)。
2、右擊 MySQL服務(wù),查看“屬性”:往后拖一下,找到—default-file下圖中畫框部分,這里指明了MySQL啟動的時候要加載的配置文件.
3、 找到該路徑下的配置文件,進行修改。
4、 具體修改內(nèi)容:
文字:
[client]
port=3306
default-character-set=utf8mb4
[mysql]
port=3306
default-character-set=utf8mb4
[mysqld]
port=3306
character-set-client-handshake= FALSE
character-set-server= utf8mb4
collation-server= utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
5、 然后重啟MySQL56服務(wù)。
6、 在運行里面,找到并打開mysql command line,使用以下命令查看是否生效。
SHOWVARIABLES WHERE Variable_name LIKE 'character/_set/_%' OR Variable_name LIKE'collation%';
看到下面這個畫面就說明生效了:
7、以為這樣就完了嗎?No,即使是這樣我們無論是在mysql workbench還是通過python+mysqldb建立的utf8mb4數(shù)據(jù)庫其實還是utf-8的,也正因如此,我們的emoj字符才一直不能插入到數(shù)據(jù)庫中。
即使建立的數(shù)據(jù)庫是utf8mb4的,我們看到這個數(shù)據(jù)庫還是utf8的。
所以我們還需要繼續(xù)實驗,仔細看修改配置文件里面有一句:init_connect='SETNAMES utf8mb4',那我可以拿來用到數(shù)據(jù)庫中。
果然,發(fā)現(xiàn)加上“SET NAMES utf8mb4;”這句以后,數(shù)據(jù)庫變成了utf8mb4.:
通過上文我們已經(jīng)知道一種解決辦法了,但有一個硬性條件就是你的數(shù)據(jù)庫版本。當你的數(shù)據(jù)庫版本沒有達到5.5.3怎么辦呢…總結(jié)一下,mysql支持存儲emoji表情的方法,至少有兩種。1.修改數(shù)據(jù)庫編碼為utf8mb4,前提是你的mysql數(shù)據(jù)庫版本必須得是5.5.3及以后的2.將帶emoji的文本轉(zhuǎn)為base64來進行存儲,返回時進行相應(yīng)解碼返回
創(chuàng)建數(shù)據(jù)庫
選擇開始菜單中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打開【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份驗證建立連接。
在【對象資源管理器】窗口中展開服務(wù)器,然后選擇【數(shù)據(jù)庫】節(jié)點
右鍵單擊【數(shù)據(jù)庫】節(jié)點,從彈出來的快捷菜單中選擇【新建數(shù)據(jù)庫】命令。
執(zhí)行上述操作后,會彈出【新建數(shù)據(jù)庫】對話框。在對話框、左側(cè)有3個選項,分別是【常規(guī)】、【選項】和【文件組】。完成這三個選項中的設(shè)置會后,就完成了數(shù)據(jù)庫的創(chuàng)建工作,
在【數(shù)據(jù)庫名稱】文本框中輸入要新建數(shù)據(jù)庫的名稱。例如,這里以“新建的數(shù)據(jù)庫”。
在【所有者】文本框中輸入新建數(shù)據(jù)庫的所有者,如sa。根據(jù)數(shù)據(jù)庫的使用情況,選擇啟用或者禁用【使用全文索引】復(fù)選框。
在【數(shù)據(jù)庫文件】列表中包括兩行,一行是數(shù)據(jù)庫文件,而另一行是日記文件。通過單擊下面的【添加】、【刪除】按鈕添加或刪除數(shù)據(jù)庫文件。
切換到【選項頁】、在這里可以設(shè)置數(shù)據(jù)庫的排序規(guī)則、恢復(fù)模式、兼容級別和其他屬性。
切換到【文件組】頁,在這里可以添加或刪除文件組。
完成以上操作后,單擊【確定】按鈕關(guān)閉【新建數(shù)據(jù)庫】對話框。至此“新建的數(shù)據(jù)”數(shù)據(jù)庫創(chuàng)建成功。新建的數(shù)據(jù)庫可以再【對象資源管理器】窗口看到。