Mysql

Mysql 無法在 utf8mb4 排序規則中儲存表情符號

  • February 18, 2022

我無法在 mysql 數據庫中儲存表情符號字元。

我搜尋了很多,但又失敗了。我已遵循本教程並從phpmyadmin的“變數”選項卡中更改了這些變數。

| Variable_name          | Value
----------------------------
character_set_client     | utf8
character_set_connection | utf8mb4
character_set_database   | utf8mb4
character_set_filesystem | binary
character_set_results    | utf8
character_set_server     | utf8mb4
character_set_system     | utf8
collation_connection     | utf8mb4_unicode_ci
collation_database       | utf8mb4_unicode_ci
collation_server         | utf8mb4_unicode_ci

注意: set_client 和 set_result 也在utf8mb4phpmyadmin 的變數選項卡中。

我什至在 my.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

但是又沒有結果!!我只是得到????而不是表情符號。任何想法?

編輯: SHOW CREATE TABLE emoji結果

CREATE TABLE `emoji` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`emj_text` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `emj_text` (`emj_text`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

解釋https://stackoverflow.com/a/38363567/1766831

問號(普通問號,不是黑色菱形)(Se?or for Señor):

  • 要儲存的字節未編碼為 utf8mb4。解決這個問題。
  • 數據庫中的列是 CHARACTER SET utf8mb4。解決這個問題。
  • 此外,請檢查讀取期間的連接是否為 UTF-8。(也就是說,檢查 phpmyadmin 的utf8mb4.

一旦????儲存,表情符號就會失去。也就是INSERT那邊有問題。SELECT側面也可能有問題。

我遇到了同樣的問題,我按照您上面發布的教程更改了我的 Laravel/SQL 配置,如下所示:

'mysql' => [
   'driver'    => 'mysql',
   'host'      => env('DB_HOST', 'localhost'),
   'database'  => env('DB_DATABASE', 'database_name'),
   'username'  => env('DB_USERNAME', 'username'),
   'password'  => env('DB_PASSWORD', ''),
   'charset'   => 'utf8mb4',              //correct charset for emojis
   'collation' => 'utf8mb4_unicode_ci',   //proper collation
   'prefix'    => '',
   'strict'    => false,
],

這行得通!

引用自:https://dba.stackexchange.com/questions/153720