• 请不要在回答技术问题时复制粘贴 AI 生成的内容
l890908
V2EX  ›  程序员

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

  •  
  •   l890908 · Nov 16, 2019 · 3156 views
    This topic created in 2543 days ago, the information mentioned may be changed or developed.
    数据库编码是 utf8mb4_general_ci

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

    可能是啥原因?
    13 replies  •  2019-11-18 09:09:07 +08:00
    vibbow
    vibbow
    Nov 16, 2019
    1
    你连接用的编码呢?
    wangyzj
    wangyzj
    Nov 16, 2019
    2
    把 ThinkPHP3 编码配置改为 utf8mb4_general_ci
    l890908
    l890908
    OP
    Nov 16, 2019
    3
    @vibbow 连接编码是默认的 utf8 -》'DB_CHARSET' => 'utf8', // 数据库编码默认采用 utf8
    输出编码也是 utf-8 'DEFAULT_CHARSET' => 'utf-8', // 默认输出编码
    l890908
    l890908
    OP
    Nov 16, 2019
    4
    @wangyzj 这样不行,设置成 utf8mb4 就所有中文都是乱码了
    renmu
    renmu
    Nov 17, 2019 via Android
    5
    随便提个猜想,机器字体不支持
    also24
    also24
    Nov 17, 2019
    6
    『数据库编码是 utf8mb4_general_ci 』

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

    我怀疑是你以前用了 utf8 写入了大部分数据,使得他没法用 utf8mb4 的方式读出来,那么你把所有数据洗一下吧(只是一个猜测
    l890908
    l890908
    OP
    Nov 17, 2019
    12
    @vjnjc 是 写入 utf8mb4, 然后用其他编码是读不出来的,得吧所有数据洗一遍,还不能重新建表插入
    qsbaq
    qsbaq
    Nov 18, 2019
    13
    utf8mb4 正解
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1340 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    ♥ Do have faith in what you're doing.