项目中有个评论功能,微信用户授权登录后,需要显示用户的昵称及评论内容。
用户的昵称和评论内容都会出现 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
这个扩展貌似只能根据名称和编码查询出 Emoji 表情。
1
jswh 2017-01-11 20:24:30 +08:00
对应字段的编码检查了么?
|
2
bdbai 2017-01-11 20:55:30 +08:00 via Android
utf8mb4
|
3
anai1943 OP @jswh
数据库和表的字段都改成 utf8mb4 了,是不是服务器上的 MySQL 配置的有问题呢。 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/ ``` |
4
laoyuan 2017-01-11 21:55:42 +08:00
显示成????一堆问号
在哪里显示成问号,浏览器? shell ?这个问题是大问题 |
5
techmoe 2017-01-11 22:16:29 +08:00 via Android
laravel 连接数据库用的什么编码?
|
6
Kylinsun 2017-01-11 22:21:49 +08:00 via Android
看的时候是?,取出来就不是?了。
|
7
ruooooooli 2017-01-12 09:42:12 +08:00
我之前也遇到了这个问题 可是并没有发现好的方法
|
8
mingyun 2017-01-12 22:47:43 +08:00
utf8mb4 需要 mysql 5.6 支持
|