解决node+mysql不能保存emoji表情包的问题

效果图

1.前端

2.数据库 

实现

Emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以数据插不进去,而utfmb64是支持四个字节的。所以需要将mysql编码从utf8转换成utf8mb4,从【数据库、表、相应字段】都需要修改为utf8mb4,切记!!!

如下:

 这时候直接在数据库保存emoji表情包是没有问题的,但是使用nodejs进行操作数据库时还是会报错,就需要在nodejs链接数据库的配置中添加这一句:

charset: 'UTF8MB4_UNICODE_CI', // 用于保存和读取表情包这种4字节的

如下图所示: 

 这样就成功实现了nodejs在mysql中对emoji的保存和读取。

前端实现

 @emoji.json

{
  "emojiList": "😀,😁,😂,😃,😄,😅,😆,😉,😊,😋,😎,😍,😘,😗,😙,😚,😇,😐,😑,😶,😏,😣,😥,😮,😯,😪,😫,😴,😌,😛,😜,😝,😒,😓,😔,😕,😲,😷,😖,😞,😟,😤,😢,😭,😦,😧,😨,😬,😰,😱,😳,😵,😡,😠,💘,❤,💓,💔,💕,💖,💗,💙,💚,💛,💜,💝,💞,💟,❣,💪,👈,👉,☝,👆,👇,✌,✋,👌,👍,👎,✊,👊,👋,👏,👐,✍,🍇,🍈,🍉,🍊,🍋,🍌,🍍,🍎,🍏,🍐,🍑,🍒,🍓,🍅,🍆,🌽,🍄,🌰,🍞,🍖,🍗,🍔,🍟,🍕,🍳,🍲,🍱,🍘,🍙,🍚,🍛,🍜,🍝,🍠,🍢,🍣,🍤,🍥,🍡,🍦,🍧,🍨,🍩,🍪,🎂,🍰,🍫,🍬,🍭,🍮,🍯,🍼,☕,🍵,🍶,🍷,🍸,🍹,🍺,🍻,🍴,🌹,🍀,🍎,💰,📱,🌙,🍁,🍂,🍃,🌷,💎,🔪,🔫,🏀,⚽,⚡,👄,👍,🔥,🙈,🙉,🙊,🐵,🐒,🐶,🐕,🐩,🐺,🐱,😺,😸,😹,😻,😼,😽,🙀,😿,😾,🐈,🐯,🐅,🐆,🐴,🐎,🐮,🐂,🐃,🐄,🐷,🐖,🐗,🐽,🐏,🐑,🐐,🐪,🐫,🐘,🐭,🐁,🐀,🐹,🐰,🐇,🐻,🐨,🐼,🐾,🐔,🐓,🐣,🐤,🐥,🐦,🐧,🐸,🐊,🐢,🐍,🐲,🐉,🐳,🐋,🐬,🐟,🐠,🐡,🐙,🐚,🐌,🐛,🐜,🐝,🐞,🦋,😈,👿,👹,👺,💀,☠,👻,👽,👾,💣"
}

@chart.vue

<srcipt>
const {emojiList} = require('./emoji.json')

export default {
  name: 'chart',
  data () {
    return {
      mess: '', // 聊天输入的信息
      emojiList: emojiList.split(',') // 表情包列表
    }
  },
  methods: {
    // 表情包点击事件
    emojiDown (index) {
      this.mess = this.mess + this.emojiList[index]
    }
  }
</script>
            <!--表情包发送功能-->
            <el-dropdown placement="top-start">
              <div class="footer_content_menu_face">
                <i class="iconfont icon-face"></i>
              </div>
              <el-dropdown-menu slot="dropdown">
                <div class="face_list">
                  <div v-for="(item, index) in emojiList" v-bind:key="index" class="face-item" @click="emojiDown(index)">
                    {{item}}
                  </div>
                </div>
              </el-dropdown-menu>
            </el-dropdown>
<style scoped>
.footer_content_menu_face{
  width: 30px;
  height: 30px;
  text-align: center;
  font-size: 20px;
}
.footer_content_menu_face:hover .icon-face{
  color: #01a3fc;
}
.face_list{
  width: 300px;
  height: 200px;
  display: flex;
  flex-wrap: wrap;
  overflow-y: auto;
  overflow-x: hidden;
}
.face-item{
  width: 30px;
  height: 30px;
  border: solid 1px #e0e0e0;
  margin: 0 -1px -1px 0;/*解决相邻border看起来很粗问题*/
  text-align: center;
  font-size: 20px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值