【发布时间】:2019-04-28 08:37:29
【问题描述】:
我们有一个发送短信的 php (codeigniter) 网络应用程序。我们连接的数据库是oracle。当一些客户试图通过我们的 web 应用程序发送表情符号时,表情符号在手机中的消息上显示效果不佳。我们可以在 sql plus 中看到表情符号,但它在 pl sql 上表现不佳。我们假设它与一些编码问题有关,但不能指出确切的问题。
流程是这样的
- PHP 插入 oracle。
- 从 oracle 到 mysql 的 Java。
- 插入mysql。
- 作为消息发送到手机。
例如:
这是它在 php 文本区域中的外观:
这是插入到 oracle 后使用 PL/SQL 的样子:
这是插入到 oracle 后使用 SQL PLUS 的样子:
这就是它在 mysql 中的样子:
还有在手机短信里:
mysql和oracle中的charset是utf8mb4
我们尝试将 php 中的查询更改为插入到 sms(messaage) 值中(?)我们尝试将列的类型从 varchar2 更改为 clob
编辑
我认为从 PHP 到 oracle 的连接设置得很好,你可以在这里看到:
【问题讨论】:
-
这些可能是unicode emoji 像这样:????????因此,您必须在任何地方都支持完整的 unicode 才能使其工作。是的,utf8mb4 应该可以解决问题……但不要忘记传输层。
-
由于您的数据库具有正确的字符集,因此请确保您的数据库连接具有正确的字符集
-
我用图片编辑了问题,显示了从 php 到 oracle 的连接设置。
-
对于 MySQL,我会选择
utf8mb4_unicode_ci作为数据库排序规则。它确实one byte more。 -
Oracle 数据库中没有字符集
utf8mb4。在 php 中设置utf8也不匹配。您使用哪种工具在 PL/SQL 中进行显示?你从SELECT DUMP(MESSAGE, 1016) from ...得到什么?我觉得你在 SQLplus 中得到了正确的表情符号,因为知道如何在 SQLpus 中正确获取特殊字符的人也知道如何处理字符集,通常默认情况下它不起作用。
标签: php mysql oracle plsql emoji