Thinkphp3 从数据库读取 “𬭶”“𬬻”“𬭸”“𫟷”和所有 emoji 全部显示两个问号,编码是 utf8

2019 年 11 月 16 日
 l890908
数据库编码是 utf8mb4_general_ci

ThinkPHP3 编码配置为默认的 utf8,其他中文字英文都能从数据库都去并显示正确,唯独这些偏僻字显示两个??,emoji 也无法识别显示一个??,按道理 utf8mb4_general_ci 应该是都可以识别的

可能是啥原因?
3140 次点击
所在节点    程序员
13 条回复
vibbow
2019 年 11 月 16 日
你连接用的编码呢?
wangyzj
2019 年 11 月 16 日
把 ThinkPHP3 编码配置改为 utf8mb4_general_ci
l890908
2019 年 11 月 16 日
@vibbow 连接编码是默认的 utf8 -》'DB_CHARSET' => 'utf8', // 数据库编码默认采用 utf8
输出编码也是 utf-8 'DEFAULT_CHARSET' => 'utf-8', // 默认输出编码
l890908
2019 年 11 月 16 日
@wangyzj 这样不行,设置成 utf8mb4 就所有中文都是乱码了
renmu
2019 年 11 月 17 日
随便提个猜想,机器字体不支持
also24
2019 年 11 月 17 日
『数据库编码是 utf8mb4_general_ci 』

是否有检查具体的表和字段的编码?
vibbow
2019 年 11 月 17 日
连接编码需要是 utf8mb4
wangyzj
2019 年 11 月 17 日
@l890908 不应该
理论上可以转换的
mamahaha
2019 年 11 月 17 日
皮裤套棉裤,必定有缘故
heart4lor
2019 年 11 月 17 日
数据库、表、字段、连接编码都用 utf8mb4
vjnjc
2019 年 11 月 17 日
你要 connection 使用 utf8mb4 才能正确读出 emoj,所以要把编码改成 utf8mb4,在这个基础上解决问题。

我怀疑是你以前用了 utf8 写入了大部分数据,使得他没法用 utf8mb4 的方式读出来,那么你把所有数据洗一下吧(只是一个猜测
l890908
2019 年 11 月 17 日
@vjnjc 是 写入 utf8mb4, 然后用其他编码是读不出来的,得吧所有数据洗一遍,还不能重新建表插入
qsbaq
2019 年 11 月 18 日
utf8mb4 正解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/620272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX