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

2019-11-16 21:40:04 +08:00
 l890908
数据库编码是 utf8mb4_general_ci

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

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

是否有检查具体的表和字段的编码?
vibbow
2019-11-17 01:28:59 +08:00
连接编码需要是 utf8mb4
wangyzj
2019-11-17 07:42:31 +08:00
@l890908 不应该
理论上可以转换的
mamahaha
2019-11-17 09:48:06 +08:00
皮裤套棉裤,必定有缘故
heart4lor
2019-11-17 10:51:04 +08:00
数据库、表、字段、连接编码都用 utf8mb4
vjnjc
2019-11-17 21:50:39 +08:00
你要 connection 使用 utf8mb4 才能正确读出 emoj,所以要把编码改成 utf8mb4,在这个基础上解决问题。

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

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

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

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

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

© 2021 V2EX