我已经解决这个问题已有一段时间了。我要实现的目标是保存到MySQL数据库,然后将其输出到窗口,然后将通常确认的表情符号(例如,是21世纪的问题)
经过大量的修改和在本网站上找到的各种教程和答案之后,我设法实现了将它们保存到数据库的能力。
我有一个简单的自我提交表单作为示例,还有一个配置为UTF8mb4的MySQL数据库。如果我将emoji表情粘贴到textarea并点击Submit,它确实会保存到数据库表中。当使用phpmyadmin查看时,它确实显示了按预期保存的测试表情符号。但是,当我使用cfquery从数据库中获取字符串并将其输出到窗口时,它会显示一个简单的“?”。
有什么想法吗?
其他信息: 我的测试窗口顶部确实包含以下标签:
<cfset setEncoding("form","utf-8")>
<cfcontent type="text/html; charset=utf-8">
<cfprocessingdirective pageencoding = "utf-8">
数据库连接字符串也有allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
,似乎可以正常工作,因为我可以成功插入表情符号。我想念什么?
编辑1
根据请求,以下代码用于从数据库中选择包含表情符号的字符串并将其输出到窗口:
<cfquery name="get_ci" datasource="test" username="#application.db_username#" password="#application.db_password#">
SELECT _string
FROM test_table
WHERE _id = 1
LIMIT 1
</cfquery>
<cfoutput>#get_ci._string#</cfoutput>
编辑2(解决方案)
经过深思熟虑之后,肯定有很多解决方案,但这至少对我有用。为了升级MySQL服务器以支持UTF8mb4,我使用了本指南:https://mathiasbynens.be/notes/mysql-utf8mb4(请注意,在启动此线程之前已完成此操作,但这并不是所解决问题的解决方案)。但是,在其技术人员的帮助下使其能够在我们托管的VPS上运行之后,我设法成功匹配了设置,这是答案: 该指南要求将my.ini的设置更新为以下内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
但是,握手和整理是使整个操作失败的两个方法。我一评论完,哇!因此,以防万一有人在这个问题上苦苦挣扎,并求助于…尝试注释掉这些设置,看看是否可行。
使用已应用的注释更新了my.ini:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
#character-set-client-handshake = FALSE
character-set-server = utf8mb4
#collation-server = utf8mb4_unicode_ci
答案 0 :(得分:1)
解决方案:
经过深思熟虑之后,肯定有很多解决方案,但这至少对我有用。为了升级MySQL服务器以支持UTF8mb4,我使用了本指南:https://mathiasbynens.be/notes/mysql-utf8mb4(请注意,在启动此线程之前已完成此操作,但这并不是所解决问题的解决方案)。但是,在其技术人员的帮助下使其能够在我们托管的VPS上运行之后,我设法成功匹配了设置,这就是答案:指南要求将my.ini的设置更新为以下设置:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
但是,握手和整理是使整个操作失败的两个方法。我一评论完,哇!因此,以防万一有人在这个问题上苦苦挣扎,并求助于…尝试注释掉这些设置,看看是否可行。
使用已应用的注释更新了my.ini:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
#character-set-client-handshake = FALSE
character-set-server = utf8mb4
#collation-server = utf8mb4_unicode_ci
答案 1 :(得分:0)
进入您的ColdFusion管理员>服务器设置> Java和JVM。
在您的JVM参数中添加-Dfile.encoding=UTF-8
。然后重新启动ColdFusion。
在MySQL数据库中,表的编码应为utf8mb4
。
我不记得是否也必须设置字段的“编码和排序规则”。