今天在用mysql存储从微信服务器拉来的数据,出现插入数据异常,报 Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F 的错误。
最终在网上查了一下,有几个解决方案:
 
方案一:
如果是用thinkphp开发的话,在tinhkphp  config.php中连接数据库配置文件中 设置
'DB_CHARSET'=> 'utf8mb4', // 字符集
这样就可以解决问题。
如果没用thinkphp开发,直接使用php开发的话,在执行sql语句的时候,要添加
mysql_query("set names utf8");或者 mysql_query("set character_set_client utf8mb4");
方案二:
 把mysql数据库升级到5.5以上,然后数据库编码设置为utf8mb4,字段的编码最好也为utf8mb4。
 
 
问题:用户个人信息设置时使用emoji表情,MySQL如果不是utf8mb4会导致异常。
SHOW VARIABLES LIKE 'collation_%';     -----查看mysql 系统编码
SHOW VARIABLES LIKE 'char%';

SET    NAMES utf8;  ----相当于设置了 character_set_client、character_set_connection、character_set_results
SET   NAMES utf8mb4;
SET   character_set_client=utf8mb4;    ----针对特殊字符
SET   character_set_connection=utf8mb4;--针对特殊字符
SET   character_set_results=utf8mb4;

总之,就是在character_set_client或者character_set_connection中,至少一个的编码为utf8mb4。

utf8mb4这种格式,就是为了兼容手机端的,比UTF-8多了好多格式,包括了UTF-8的格式。
 
 

php中 mysql 插入特殊字符(手机端的emoji表情)出现异常的更多相关文章

  1. Oracle中如何插入特殊字符: & 和 ' (多种解决方案)

    Oracle中如何插入特殊字符:& 和 ' (多种解决方案)今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Inse ...

  2. AngularJs 中使用OpenLayer例子,手机端地图加载不显示问题

      var map, toolip, overlay;            var layer = new ol.layer.Vector();            var imgLayer = ...

  3. 字符集UTF-8MB4 MySQL utf8mb4 字符集,用于存储emoji表情

    字符集UTF-8MB4 utf8mb4兼容utf8,且比utf8能表示更多的字符.看unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8m ...

  4. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)

    今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,原来 ...

  5. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)-转载

    文章出处:http://blog.sina.com.cn/s/blog_5f39af320101gb3f.html 今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量A ...

  6. thinkphp中怎么判断是手机端访问还是pc端访问?

    function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) r ...

  7. Python中MySQL插入数据

    sql = 'INSERT INTO course(class_name, credit, properties, teacher_name, college_given, classroom) ' ...

  8. 判断是手机端还是电脑端 isMobile()

    1.在PublicController控制器中写好判断手机端方法. <?php namespace Home\Controller; use Think\Controller; class Pu ...

  9. pc/移动端(手机端)浏览器的直播rtmp hls(适合入门者快速上手)

    一.直播概述 关于直播,大概的过程是:推流端——>源站——>客户端拉流,用媒介播放 客户端所谓的拉流就是一个播放的地址url,会有多种类型的流: 视频直播服务目前支持三种直播协议,分别是R ...

随机推荐

  1. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...

  2. 初探swift语言的学习笔记十一(performSelector)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  3. input from 表单提交 使用 属性 disabled=&quot;disabled&quot; 后台接收不到name=&quot;username&quot;的值

    input from 表单提交 使用 属性 disabled="disabled" 后台接收不到name="username"的值

  4. Windows Server 2012 R2 安装.NET Framework 3.5报错

    简单记录一下,Windows Server 2012 R2 安装.NET Framework 3.5报错,下面是解决方法 载入ISO文件Windows Server 2012 R2,而且在安装的过程中 ...

  5. 关于java及多线程

    http://www.w3cschool.cc/java/java-multithreading.html

  6. MySQL 存储过程传參之in, out, inout 參数使用方法

    存储过程传參:存储过程的括号中.能够声明參数. 语法是 create procedure p([in/out/inout] 參数名  參数类型 ..) in :给參数传入值,定义的參数就得到了值 ou ...

  7. 判断一个包是否可以安装是一个NP-complete问题

    1 checking whether a single package P can be installed, given a repository R,is NP-complete

  8. [m() for i in range(8)]

    import time def m(): print(time.time()) time.sleep(1) [m() for i in range(8)] 一行 list

  9. Android Studio集成Genymotion 及Genymotion 配置ADB

    1.打开 Android Studio,依次[File]-[Settings],快捷键  Ctrl + Alt + S 2.在打开的 settings 界面里找到 plugins 设置项,点击右侧的“ ...

  10. Django 缓存 使用 Redis Memcached 为网站提速

    RedisRedis是一种键值对类型的内存数据库,读写内存比读写硬盘快,我们在Django里面使用Redis非常方便,下面给出详细步骤 基于Ubuntu 1. 安装Redis和django-redis ...