(已解决) Laravel 5.2 怎么处理 Emoji 表情?

已经解决了,存储评论的content字段编码没改过来。。。

项目中有个评论功能,微信用户授权登录后,需要显示用户的昵称及评论内容。
用户的昵称和评论内容都会出现Emoji表情,目前我把存储评论的表改成了utf8mb4编码。
服务器环境:PHP7 + MySQL5.6 + Laravel 5.2

databases.php 配置文件

    'mysql_utf8mb4' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => env('DB_PREFIX', 'pn_'),
            'strict' => false,
            'engine' => null,
        ],

comment 表的 Model

class Comment extends Model
{
    protected $connection = 'mysql_utf8mb4';
        protected $table = 'comment';
}

用iPhone测试输入了几个Emoji表情,存到MySQL的时候,显示成????一堆问号

请问怎样保存Emoji表情到MySQL数据库,再次查询的时候,页面中的Emoji表情能够在PC、IOS、安卓等设备上都可以正常显示呢?

相关扩展:https://github.com/unicodeveloper/laravel-...
这个扩展貌似只能根据名称和编码查询出Emoji表情。

Aber
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 14
leo

数据库结构对应的修改了吗

7年前 评论

修改成utf8mb4就足够了,至于为什么显示???,就和你的系统或者你的mysql终端有关系了。emoji这东西需要你的系统或宿主软件的支持。

7年前 评论
Aber

@leo 改了,字段也改成utf8mb4了。服务器的my.cnf需要改么?
目前my.cnf改成这样了

[client]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
运行
show variables like 'char%';

显示
character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    utf8mb4
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
7年前 评论
Aber

@coodeer 麻烦看下我3楼的回复,是服务器上的mysql没配置好么?谢谢

7年前 评论

@Dee 没必要修改MySQL配置的,依次检查你的数据库、表、字段的字符集设置即可

7年前 评论

请问最后是怎么解决的呀?

6年前 评论
nff93

@会飞的猪 依次检查数据库字段类型、laravel数据库配置的字段类型,需要为utf8mb4

6年前 评论

@nff93 是的,已经解决了。原来直接改整个表的编码不生效的。后来直接单独修改字段的编码就OK了

6年前 评论

@nff93 下午重新测试一次,突然失效了:disappointed_relieved: 又变成了插入进去,变成了问号

6年前 评论

OK了,我把表也一起成,utf8mb4和utf8mb4_unicode_ci 又可以了。 今天早上是这样配置不行的。 不知道为什么

6年前 评论

数据表是这样子:
ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
字段改成content varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
但是存到表里面还是问号。

5年前 评论

@会飞的猪
数据表是这样子:
ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
字段改成content varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
但是存到表里面还是问号。

5年前 评论

@sunniness 还需要在laravel 的MySQL配置中 设置一下,忘了哪个字段是什么来着,很久没使用了😓,这样在数据库存储是有emoji表情显示。

5年前 评论

@sunniness 不过取出来正常的话,那就好😁

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!