MySQL 存儲表情字符


修改

服務器端

修改數據庫配置文件/etc/my.cnf,添加下面的配置,然后重啟服務器:

1
2
3
4
5
6
7
[mysqld]
character - set -server=utf8mb4
collation_server=utf8mb4_unicode_ci
init- connect = "SET NAMES utf8mb4"
 
[mysql]
default - character - set =utf8mb4

  

重啟之后,登錄 mysql,可以通過show variables like 'character%';查看編碼是否已經修改成功。修改成功應該類似如下:

mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8mb4                          |
| character_set_connection | utf8mb4                          |
| character_set_database   | utf8mb4                          |
| character_set_filesystem | binary                           |
| character_set_results    | utf8mb4                          |
| character_set_server     | utf8mb4                          |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

然后再修改相應的數據庫表的編碼為 utf8mb4:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4;

轉換數據表編碼的語句格式如下: ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

客戶端

使用不同的編程語言的時候,可能會對 utf8mb4 不支持,不能在連接字符串中指定的,此時可以在獲取連接之后,執行set names utf8mb4來解決這個問題。

比如,對於 ThinkPHP 框架,在配置文件中設置數據庫連接字符集為 utf8mb4 之后('DB_CHARSET'=>'utf8mb4'),會出現錯誤,提示無法使用這個字符集。

此時,由於我們已經在 mysql 的配置文件中設置了init-connect="SET NAMES utf8mb4",所以直接將 ThinkPHP 配置文件中的數據庫字符集設置為空('DB_CHARSET'=>''),則連接數據庫之后,服務器會自動設置連接字符集為 utf8mb4,此時寫入和讀取 emoji 表情就能正常了。

擴展

MySQL 默認情況下,無法存儲中文字符,其實這和 MySQL 默認無法存儲表情字符是同樣的原因:數據庫字符編碼問題。

默認情況下,MySQL 使用的字符集是 Latin,所以無法存儲中文或者其他的一些字符。

如果要存儲中文,可以設置 MySQL 的字符集為支持中文的字符集,比如 GBK 或者 UTF-8。一般情況下,我們設置為 UTF-8,能有更好的兼容性。

  1. 修改 MySQL 配置文件/etc/my.cnf,添加下面的配置,然后重啟服務器:

    1
    2
    3
    4
    5
    [mysqld]
    character - set -server=utf8
     
    [mysql]
    default - character - set =utf8
  2. 重啟 mysqld 服務,使剛才的修改生效

  3. 如果數據庫中已經建有數據表了,那么還需要將這些數據表的字符集做更改。如果數據表有很多,可以導出數據庫和數據,然后重新建庫。

    1
    ALTER  TABLE  tbl_name  CONVERT  TO  CHARACTER  SET  utf8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM