Mysql
Mysql 無法在 utf8mb4 排序規則中儲存表情符號
我無法在 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 也在
utf8mb4
phpmyadmin 的變數選項卡中。我什至在 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, ],
這行得通!