数据库表字段编码和存储展示emoji表情

2024-07-07 17:32:00
丁国栋
原创 227
摘要:如何在MySQL数据库中存储和展示emoji表情。


要想在Windows中输入Emoji表情😉:

  1. 可以使用Windows系统自带的快捷键和功能,按下 Windows键 + 英文句号. 即可打开表情输入对话框😁。
  2. 可以使用本来打开剪贴板历史的快捷键 Windows键 + V,再切换选项卡到表情页❤️。
  3. 可以使用Windows自带的微软输入法,中文输入模式下输入任意字符,显示候选词后选择候选词的最后按钮,或者直接输入你要查找的表情,比如输入“大笑”就可以在候选词中看见“😀”
  4. 其他输入法或许也可以,但有的输入法看似是个emoji实则是个图片,不如用以上方法🤔。

现代浏览器本身是支持Emoji表情的,所以无需特殊设置。


注意:英文是单字节编码的,中文是多字节编码的,一个中文字符无法使用一个byte表示,至少需要使用2个字节表示(gbk2个字节,utf8 3个字节),utf8mb4是使用4个字节表示一个中文字符,因此从utf8mb3修改为utf8mb4后每个中文符号会多占用一个字节的空间。


如果是要在数据库中支持存储和展示Emoji,则需要这样做

  1. 字符串字段(比如varchar、text)必须是utf8mb4编码,utf8mb3这样的不行,mb就是多字节的意思,emoji是4字节的编码格式,所以需要使用mb4;
  2. 上面提到是数据库表的字段要是utf8mb4,因为数据库内部的编码有两处,表编码和字段编码,字段编码可以不同于表编码,如果不指定字段编码则默认使用表编码;
  3. 客户端连接数据库必须使用utf8mb4编码,通常默认是utf8,需要执行SET NAMES utf8mb4;,这一点同样适用于编程语言的代码中;
  4. 修改指令ALTER TABLE `DATABASE_NAME`.`TABLE_NAME` MODIFY COLUMN `COLUMN_NAME1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL AFTER `COLUMN_NAME2`;

PHP客户端指定连接数据库时的编码的几种方式

  1. 如果使用mysqli,则使用语句:$mysqli->set_charset("utf8mb4");设置MySQL数据库客户端编码
  2. 如果使用pdo,则创建pdo对象之前使用语句:$dsn = "mysql:host={$params->host}; port={$params->port}; dbname={$params->name}; charset={$params->encoding}"; ,或者在创建pdo对象$pdo之后使用语句 $pdo->exec("SET NAMES {$params->encoding}"); 设置MySQL数据库客户端编码


发表评论
博客分类