emoji

MySQL 中如何存储 emoji ?

大憨熊 提交于 2019-12-02 03:24:45
问题还原 使用 erlang 存储一些特殊字符串到 MySQL 的时候,却没法读出来。经检查,这些字符串的二进制格式如下: <<240,159,152,134,240,159,152,144>> 查看二进制的 unicode 是什么? 14> unicode:characters_to_list(<<240,159,152,134,240,159,152,144>>). [128518,128528] 15> erlang:integer_to_list(128518,16).%%查看十六进制 "1F606" 16> erlang:integer_to_list(128528,16). "1F610" 明显,1F606 和 1F610 超过了常见 unicode 字符串 0000-FFFF 的表达范围。 1F606 和 1F610 代表什么? 根据 unicode 官网上的说明,这是一种 emoji(表情符号),具体的展示形式与厂商有关。 MySQL 上存储失败的原因 目前来说,多数 MySQL 都是以 utf8 存储,注意 MySQL 的 utf8 和我们所说的传统 utf8 有点区别。MySQL 的 utf8 编码规定了最多只能有 3 个字节,而 emoji 的 unicode 已经超过了 3 个字节,因此 MySQL 的 utf8 无法识别与存储 emoji。 为此可以查阅

Jade插入emoji字符总结

坚强是说给别人听的谎言 提交于 2019-12-02 03:16:59
不修改Mysql 服务器字符集(character_set_server=utf8mb4)的前提下,使用Jade插入Emoji字符. Mysql服务器字符集设置: mysql> show variables like 'character%'; +--------------------------+---------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /opt/mysql/server-5.6/share/charsets/ | +--------

Laravel项目中使用mysql存储emoji表情乱码的问题

对着背影说爱祢 提交于 2019-12-02 03:03:58
在mysql中存储中文时通常用UTF8的编码方式,而用此编码方式存储emoji表情时,会出现乱码或插入失败,原因是utf8编码部支持emoji表情,至于为什么不支持,可参考这篇文章: mysql utf8mb4与emoji表情 ,因此需要将utf8编码换成utf8mb4,步骤如下: 在mysql中,将需要存储emoji表情的字段的编码换成utf8mb4 ALTER TABLE `TABLE_NAME` MODIFY `COLUMN_NAME` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 在laravel的数据库配置文件 config/databases.php 中设置mysql连接的编码 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' =>

mysql字符集utf8 和utf8mb4编码问题

心不动则不痛 提交于 2019-12-02 03:03:43
最近看了一篇文章是关于Mysql中utf-8编码问题的,我们在Mysql中用到的utf8实际上不是真正的 UTF-8,在Mysql中utf8mb4才是真正的UTF-8。 在有些地方看到说utf8mb4相比于utf8是为了解决emoji(就是我们聊天的时候笑脸表情)问题,感觉这种说法对但是不完全对。utf8mb4相当于utf8的一个扩展,出现utf8mb4是因为现在Mysql中的utf8已经不能满足我们对字符编码的需求了。 Mysql从4.1 版本开始支持 UTF-8,最大字符长度为 3 字节,三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。于是在MySQL5.5.3版本后就有了utf8mb4,它支持四个字节编码在utf8消耗空间一些,但是它可以支持跟多的字符。 所以,在我们最新设计数据库的时候最好使用utf8mb4字符集,同时使用varchar代替char类型。 参考文章: 记住

mysql utf8mb4与emoji表情

你说的曾经没有我的故事 提交于 2019-12-02 03:03:22
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。 utf8mb4 is a superset of utf8 utf8mb4兼容utf8,且比utf8能表示更多的字符。 至于什么时候用,看你的做什么项目了。。 在做移动应用时,会遇到ios用户会在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)   表情符号现已普遍应用于手机短信和网络聊天软件。   emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。   手机上如何使用emoji:   1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。   IOS 5用户可直接从通用中添加emoji

mysql utf8mb4与emoji表情【转】

孤人 提交于 2019-12-02 03:02:54
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。 utf8mb4 is a superset of utf8 utf8mb4兼容utf8,且比utf8能表示更多的字符。 至于什么时候用,看你的做什么项目了。。 在做移动应用时,会遇到ios用户会在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)   表情符号现已普遍应用于手机短信和网络聊天软件。   emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。   手机上如何使用emoji:   1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。   IOS 5用户可直接从通用中添加emoji

app表情符保存到数据库的问题

一个人想着一个人 提交于 2019-12-02 03:02:35
下述网址的表情包兼容了网页、ios、apple等平台,图标的显示在各平台间可能有些差别,但基本上不需要自己单独再去做一套图标了。 emoji表情符全表 http://apps.timwhitlock.info/emoji/tables/unicode 在php中使用网页中的使用 <?php $emoji = 'F09F9883'; //第三个表情符的utf-8形式:\xF0\x9F\x98\x83 echo hex2bin($emoji); ?> 在google chrom、safari、firefox浏览器可以显示正常的图标。 app里的使用也类似,只要将utf8转成对应的二进制字符再输出即可正常解释成一个图标。 复制发到微信也可以正常显示。 但微信使用的表情系统不是基于Unicode的,而且自己单独开发的,传统的使用占位符方式,如[微笑],发送后再解释成一个微笑的表情符,这种方案体验不是很好。至于为何微信选用此方案,可能是为了更好的兼容要求,毕竟开发的比较早,而且不同机型适配显示的问题,另外加上安全的考虑(emoji是基于扩展Unicode字符集实现的),在后台程序处理上要小心,否则经常会带来不必要的问题,如果这些不是主要考虑的问题,使用emoji的unicode方案不失为一种方便快速的实现。 微信的昵称是支持emoji的。 解决emoji写入数据库失败的问题

微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程

╄→尐↘猪︶ㄣ 提交于 2019-12-02 03:01:22
自己的练习项目中涉及保存微信的nickname,之前一直正常使用,但是突然遇到一个之前没有遇到的问题。经过调试发现错误如下: Incorrect string value: '\xF0\x9F\x99\x88\xF0\x9F...' for column 'nickname' at row 1 经过仔细查看发现可以获得nickname的数据,但是无法保存到mysql数据库,查看用户的微信发现在nickname中使用了emoji字符。 到百度(只能用这个,其他的麻烦呀。)上查找发现主要解决方案就是MySQL的编码设置由utf8转为utf8mb4。 具体解释可见:[详细emoji表情与utf8mb4的关系][1] ,写的非常全面详细。 网上的解决办法大多是修改my.cnf参数,设置mysql的编码为utf8mb4,这种方法虽然彻底,但是通常要重启mysql,会造成生产系统临时当机。我认为写的比较好的方法是: mysql/Java服务端对emoji的支持 ,一般可参考以上方法。文章中的关键点也说的比较清楚。 下面是我的处理方法: 要求: 1.MySQL的版本不能太低,低于5.5.3的版本不支持utf8mb4编码。select version(); 2.JDBC驱动版本不能太低,mysql connector版本高于5.1.13。 <dependency> <groupId>mysql<

让musql数据库支持表情存入

孤者浪人 提交于 2019-12-02 03:01:05
需求 :表情存入数据库 原因 :u ft8最多可以存储占3个字符的数据,而emoji表情数据是四个字符,因此mysql的utf8无法存储会报错 解决方法 : mysql5.5.3以前版本 1.urlencode转换(缺点:每次存入和取出都要加密和解密,而且一个字符经过处理后变成了12字节) 2.base64加密(缺点:每次存入和取出都要加密和解密,而且一个字符经过处理后变成了6字节) emoji表情的正则表达式 各种语言的字符串替换方法("[\\x{10000}-\\x{10ffff}\ud800-\udfff]", ""); mysql5.5.3以后版本 1.上面的加密解密同样可以用 2.修改数据库字符集utf8mb4,这个字符集是支持表情存入的 注意:数据库字符集,表字符集自动字符集,当你发现所有字符集都改了,还是不行,那么请你检查下character_set_server utf8mb4 (让数据库允许表情存入---需要重启数据库) 标签转换 /** * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) * @param str * 待转换字符串 * @return 转换后字符串 * @throws UnsupportedEncodingException * exception *

mysql支持emoji表情存取的解决方案

守給你的承諾、 提交于 2019-12-02 03:00:09
让mysql支持emoji表情存取的解决方案 APP移动端无需做任何修改,服务端修改即可。 第一步:修改jdbcUrl: conn.url=jdbc:mysql://127.0.0.1:3306/eyes?zeroDateTimeBehavior=convertToNull&autoReconnect=true 第二步:mysql驱动包: mysql-connector-java-5.1.24.jar 第三步:数据库版本检查: select version() #查看mysql版本 5.6.23-log支持utf8mb4字符集 第四步:修改mysql配置文件 my.ini,正确配置为: [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 修改完后重启mysql服务。 第五步:检查是否修改成功,正确的mysql字符集为: **************************************** character_set_database='utf8mb4'; character_set_server='utf8mb4'; collation_database='utf8mb4_unicode_ci'; collation_server='utf8mb4_unicode_ci'