【问题标题】:How to insert utf-8 mb4 character(emoji in ios5) in mysql?如何在 mysql 中插入 utf-8 mb4 字符(ios5 中的表情符号)?
【发布时间】:2011-12-10 11:41:42
【问题描述】:

我用的是mysql 5.5.10,它的character_sets是

| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8mb4_general_ci         |
| collation_database       | utf8mb4_general_ci         |
| collation_server         | utf8mb4_general_ci         |

我将 utf8mb4 从 utf8 更改为 iOS5 的表情符号。它们由 4 字节代码表示。

但是当我插入 3 个笑脸表情符号时,'???'在mysql中。

它们是 3F 3F 3F(十六进制)。

iOS4 的表情我可以很好地存储,但 iOS5 的却不行。

如何存储 iOS5 的表情符号?

请帮帮我。

【问题讨论】:

标签: iphone mysql ios5 utf8mb4


【解决方案1】:

4 字节 Unicode 字符尚未广泛使用,因此并非所有应用程序都完全支持它们。正确配置后,MySQL 5.5 可以正常使用 4 字节字符 - 检查您的其他组件是否也可以使用它们。

还有一些其他的事情要检查:

  • 除了设置客户端和服务器字符集(例如 ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; 等等。

    如果您的数据已经在 utf8 字符集中,它应该在适当的位置转换为 utf8mb4,没有任何问题。与往常一样,在尝试之前备份您的数据!

  • 还要确保您的应用层将其数据库连接的字符集设置为 utf8mb4。仔细检查这是否真的发生了——如果您正在运行您选择的框架的 mysql 客户端库的旧版本,它可能没有使用 utf8mb4 支持进行编译,并且它不会正确设置字符集。如果没有,您可能需要自己更新或编译。

  • 通过 mysql 客户端查看数据时,请确保您在可以显示表情符号的机器上,并在运行任何查询之前运行 SET NAMES utf8mb4

一旦您的应用程序的每个级别都可以支持新字符,您就应该能够在没有任何损坏的情况下使用它们。

【讨论】:

  • grep -R "SET NAMES" *
  • 如果textfield1 被索引,您可能会遇到麻烦,因为索引被限制为767 字节。 (有很多线程讨论这个;寻找“191”。)
  • 改变应用层字符集为 utf8mb4 ,解决了问题。
  • set names utf8mb4; 解决了我的问题,谢谢!
  • 该死....如果您在 MySQL Workbench 中工作,您甚至必须使用set names utf8mb4;...谁会想到!
【解决方案2】:

【讨论】:

  • 嗨,在第 3 步中,我是否必须对数据库中的每个表、列都执行此操作?或者只是到我想存储表情符号的表和列?因为现在我只更改一列,一旦我设置SET character_set_results = utf8mb4;,我就无法对任何表执行任何查询。我遇到了Server sent uknown charsetnr. Please report 错误! (即使对于选择查询)
  • @iamserious - 不要只设置 ...results,设置所有 3 件事,就像 SET NAMES 或连接参数一样。
  • 很棒的教程!你知道为什么在 my.cnf 中设置了character-set-server = utf8mb4 之后,在数据库上运行查询后,结果是 character-set-server 实际上是 latin1 吗?你知道为什么不更新吗?非常感谢!
  • 如果你想看看这里是我的类似问题:stackoverflow.com/questions/39326125/…
  • 嗨,Mathias,请问,如果我实际上只有一列支持表情符号,我可以只更改数据库、一张表和一列的字符集吗?我可以将所有其他列保持为正常的 UTF-8 吗?
猜你喜欢
  • 2014-08-06
  • 2019-03-21
  • 2020-12-09
  • 2020-09-19
  • 1970-01-01
  • 2013-01-26
  • 2014-01-08
  • 2016-06-10
相关资源
最近更新 更多