(已解决) 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表情。
数据库结构对应的修改了吗
修改成utf8mb4就足够了,至于为什么显示???,就和你的系统或者你的mysql终端有关系了。emoji这东西需要你的系统或宿主软件的支持。
@leo 改了,字段也改成utf8mb4了。服务器的my.cnf需要改么?
目前my.cnf改成这样了
@coodeer 麻烦看下我3楼的回复,是服务器上的mysql没配置好么?谢谢
@Dee 没必要修改MySQL配置的,依次检查你的数据库、表、字段的字符集设置即可
请问最后是怎么解决的呀?
@会飞的猪 依次检查数据库字段类型、laravel数据库配置的字段类型,需要为
utf8mb4
@nff93 是的,已经解决了。原来直接改整个表的编码不生效的。后来直接单独修改字段的编码就OK了
@nff93 下午重新测试一次,突然失效了:disappointed_relieved: 又变成了插入进去,变成了问号
OK了,我把表也一起成,utf8mb4和utf8mb4_unicode_ci 又可以了。 今天早上是这样配置不行的。 不知道为什么
数据表是这样子:
ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
字段改成
content
varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,但是存到表里面还是问号。
@会飞的猪
数据表是这样子:
ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
字段改成content varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
但是存到表里面还是问号。
@sunniness 还需要在laravel 的MySQL配置中 设置一下,忘了哪个字段是什么来着,很久没使用了😓,这样在数据库存储是有emoji表情显示。
@sunniness 不过取出来正常的话,那就好😁