将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql
Posted
技术标签:
【中文标题】将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql【英文标题】:passing emojis from php web app into Oracle db and mysql 【发布时间】: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 中正确获取特殊字符的人也知道如何处理字符集,通常默认情况下它不起作用。
【参考方案1】:
我找到了解决方案。 需要将连接字符集从 php 更改为 oracle 为 'al32UTF8' insted of 'utf8'。 现在效果很好。谢谢
【讨论】:
以上是关于将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql的主要内容,如果未能解决你的问题,请参考以下文章
从 iPhone 到 Python/Django 的表情符号