V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
RangerWolf
V2EX  ›  问与答

MySQL 如何才能存储 “🙏” 这个字符

  •  
  •   RangerWolf · 2017-11-29 13:26:38 +08:00 · 3040 次点击
    这是一个创建于 2557 天前的主题,其中的信息可能已经有所发展或是发生改变。
    测试 utf8 跟 utf8mb4 都不行

    求解
    19 条回复    2017-11-29 18:30:12 +08:00
    voocel
        1
    voocel  
       2017-11-29 13:46:55 +08:00   ❤️ 1
    ```
    /*
    对 emoji 进行转义
    */
    function emoji2str($str){
    $strEncode = '';

    $length = mb_strlen($str,'utf-8');

    for ($i=0; $i < $length; $i++) {
    $_tmpStr = mb_substr($str,$i,1,'utf-8');
    if(strlen($_tmpStr) >= 4){
    $strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr);
    }else{
    $strEncode .= $_tmpStr;
    }
    }
    return $strEncode;
    }

    /*
    读数据后重新转换成 emoji 返回
    */
    function str2emoji($str){
    $str_arr = explode("[[EMOJI:", $str);
    $new_str = "";

    foreach ($str_arr as $key => $val){
    $new_str .= $val;
    }

    return $new_str;
    }
    ```
    tomoya92
        2
    tomoya92  
       2017-11-29 13:49:02 +08:00   ❤️ 1
    utf8mb4 是可以的,你估计编码还是没有处理好

    ![C24EAC35-FBCE-4CEC-9C1D-8FAD9BD67169.png]( https://i.loli.net/2017/11/29/5a1e4a37a2e9b.png)
    sun019
        3
    sun019  
       2017-11-29 13:51:21 +08:00
    utf8mb4 可以 现在系统上就是用的这个
    SourceMan
        4
    SourceMan  
       2017-11-29 14:23:55 +08:00
    utf8mb4 直接可以存呀。
    edison111cry
        5
    edison111cry  
       2017-11-29 14:25:23 +08:00   ❤️ 1
    我之前也遇到过 MYSQL 存储不了四字节的,设置了半天也不行,然后存的时候直接 base64_encode 一下存进去,取出来显示的时候 base64_decode 一下再显示
    RangerWolf
        6
    RangerWolf  
    OP
       2017-11-29 14:45:43 +08:00
    @sun019 @SourceMan 有的表情符号是可以, 能帮忙试试看我标题的这个可以么?
    RangerWolf
        7
    RangerWolf  
    OP
       2017-11-29 14:46:17 +08:00
    @voocel 感谢, 只不过我这个是存爬虫, 不涉及前端
    我参考你的代码来改造一下。 再次感谢!
    RangerWolf
        8
    RangerWolf  
    OP
       2017-11-29 14:47:42 +08:00
    @edison111cry 也是个办法 赞!
    RangerWolf
        9
    RangerWolf  
    OP
       2017-11-29 14:48:18 +08:00
    @liygheart 我的环境跟你一样的。 能分享一下你是如何设置的么?
    多谢!
    SourceMan
        10
    SourceMan  
       2017-11-29 14:50:51 +08:00
    abcbuzhiming
        11
    abcbuzhiming  
       2017-11-29 15:14:58 +08:00
    楼主你查一下你的库和表到底是不是 utf8mb4 的再说,很多人自以为用的是 utf8mb4 最后发现其实是 utf8
    CloudnuY
        12
    CloudnuY  
       2017-11-29 15:34:14 +08:00   ❤️ 1


    q409195961
        13
    q409195961  
       2017-11-29 15:35:34 +08:00
    @edison111cry +1,最终用 Base64 编码
    wsbnd9
        14
    wsbnd9  
       2017-11-29 15:48:08 +08:00
    utf8mb4 是可以的
    zpf124
        15
    zpf124  
       2017-11-29 15:54:28 +08:00   ❤️ 1
    utf8mb4 是可以存的。
    楼主你贴一下不能存的那个列的属性,看看你是不是改整个库的编码而并没有改列的编码,或者是 sql 工具导出时会导出列编码导致导入到新库列编码依旧是旧的。

    如果你列编码属性是对的,那贴一些 mysql 版本号,让我们看看什么版本的 mysq 不支持 emoji。
    tomoya92
        16
    tomoya92  
       2017-11-29 16:15:57 +08:00   ❤️ 1
    @RangerWolf #9 你看看这个 http://tomoya92.github.io/pybbs/question/ 我服务器上就是按照这个配置的
    8355
        17
    8355  
       2017-11-29 18:21:08 +08:00
    你看看字段字符集变了没
    lyhiving
        18
    lyhiving  
       2017-11-29 18:24:51 +08:00 via Android
    要看字段的编码
    lhx2008
        19
    lhx2008  
       2017-11-29 18:30:12 +08:00 via Android
    mb4,连的时候也要指定 mb4
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5601 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:57 · PVG 16:57 · LAX 00:57 · JFK 03:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.