表情符号和 ColdFusion
Emoji and ColdFusion
我已经研究这个问题一段时间了。我想要实现的是保存到 MySQL 数据库,然后输出到 window,一般确认的表情符号,例如(是的,21 世纪的问题)
经过大量修改并按照本网站上的各种教程和答案进行操作后,我设法实现了将它们保存到数据库的能力。
我有一个简单的自提交表单作为示例,MySQL 数据库配置为 UTF8mb4。如果我将表情符号粘贴到文本区域并点击提交,它会按原样保存到数据库 table 中。使用 phpmyadmin 查看时,它确实显示了按预期保存的测试表情符号。但是,当我使用 cfquery 从数据库中获取字符串并将其输出到 window 时,它显示一个简单的 '?'.
有什么想法吗?
额外信息:
我的测试 window 确实在顶部包含以下标签:
<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
根据要求,下面是用于 select 包含来自数据库的表情符号的字符串并将其输出到 window:
的代码
<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
但是,握手和整理是导致整个操作失败的两个原因。我一注释掉它们,wola!所以以防万一其他人正在努力解决这个问题并求助于......尝试评论这些设置并查看它是否有效。
更新 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
进入您的 ColdFusion 管理员 > 服务器设置 > Java 和 JVM。
在您的 JVM 参数中添加 -Dfile.encoding=UTF-8
。然后重启ColdFusion。
而在MySQL数据库中,table的编码应该是utf8mb4
。
我不记得字段的 Encoding 和 Collation 是否也必须这样设置。
解决方案:
经过深思熟虑,这里肯定有很多解决方案,至少对我有用。为了升级 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
但是,握手和整理是导致整个操作失败的两个原因。我一注释掉它们,wola!因此,以防万一其他人正在努力解决这个问题并求助于......尝试评论这些设置并查看它是否有效。
更新 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
我已经研究这个问题一段时间了。我想要实现的是保存到 MySQL 数据库,然后输出到 window,一般确认的表情符号,例如(是的,21 世纪的问题)
经过大量修改并按照本网站上的各种教程和答案进行操作后,我设法实现了将它们保存到数据库的能力。
我有一个简单的自提交表单作为示例,MySQL 数据库配置为 UTF8mb4。如果我将表情符号粘贴到文本区域并点击提交,它会按原样保存到数据库 table 中。使用 phpmyadmin 查看时,它确实显示了按预期保存的测试表情符号。但是,当我使用 cfquery 从数据库中获取字符串并将其输出到 window 时,它显示一个简单的 '?'.
有什么想法吗?
额外信息: 我的测试 window 确实在顶部包含以下标签:
<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
根据要求,下面是用于 select 包含来自数据库的表情符号的字符串并将其输出到 window:
的代码<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
但是,握手和整理是导致整个操作失败的两个原因。我一注释掉它们,wola!所以以防万一其他人正在努力解决这个问题并求助于......尝试评论这些设置并查看它是否有效。
更新 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
进入您的 ColdFusion 管理员 > 服务器设置 > Java 和 JVM。
在您的 JVM 参数中添加 -Dfile.encoding=UTF-8
。然后重启ColdFusion。
而在MySQL数据库中,table的编码应该是utf8mb4
。
我不记得字段的 Encoding 和 Collation 是否也必须这样设置。
解决方案:
经过深思熟虑,这里肯定有很多解决方案,至少对我有用。为了升级 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
但是,握手和整理是导致整个操作失败的两个原因。我一注释掉它们,wola!因此,以防万一其他人正在努力解决这个问题并求助于......尝试评论这些设置并查看它是否有效。
更新 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