如何使用 Lucee 将 UTF-8 数据插入 MySQL?

Posted

技术标签:

【中文标题】如何使用 Lucee 将 UTF-8 数据插入 MySQL?【英文标题】:How do I insert UTF-8 data into MySQL using Lucee? 【发布时间】:2019-10-18 06:24:53 【问题描述】:

我正在尝试使用 Lucee 将 UTF-8 字符插入 mysql 表,但没有运气。

我已将 MySQL 表设置为使用 utf8mb4_unicode_ci,但也尝试了 utf8mb4_bin。 我已经尝试过启用和不启用“AddDefaultCharset UTF-8”的 Apache。 到数据库的连接字符串包括“characterEncoding=UTF-8” Lucee 配置在字符集设置中包含 UTF-8。

我运行的代码如下...

<cfset textValue = '???? Person Raising Hand'>
<cfdump var="#textValue#">
<cfquery name="insert">
INSERT INTO TEST_UTF8 (TestText)
VALUES ('#textValue#');
</cfquery>

转储工作正常并按原样显示,但插入返回以下错误...

“不正确的字符串值:'\xF0\x9F\x99\x8B P...' 列 'TestText' 在第 1 行”

我已经尝试通过 phpmyadmin 插入相同的字符串,它表明 MySQL 配置没问题。

【问题讨论】:

这可能是 Connector/J 的问题,而不是 Lucee 本身的问题。您使用的是哪个版本的连接器(即 MySQL 数据源扩展)?更多细节可能会有所帮助:dev.mysql.com/doc/connector-j/8.0/en/… 连接器版本为“MySQL Connector Java mysql-connector-java-5.1.38 (Revision: fe541c166cec739c74cc727c5da96c1028b4834a) (JDBC 4.0)” 【参考方案1】:

那个4字节的Emoji需要MySQL的utf8mb4utf8 不会。对于外界,utf8mb4 被称为UTF-8(带有破折号)`。

表中的列需要说CHARACTER SET utf8mb4,连接也需要说:

?useUnicode=yes&amp;characterEncoding=UTF-8 添加到 JDBC URL

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>

compileJava.options.encoding = 'UTF-8'

<form method="post" action="/your/url/" accept-charset="UTF-8">

要将 4 字节 UTF8 与 Connector/J 一起使用,请使用 character_set_server=utf8mb4 配置 MySQL 服务器。只要未在连接字符串中设置 characterEncoding,Connector/J 就会使用该设置。这相当于自动检测字符集。

【讨论】:

连接字符串已经包含“useUnicode=true&characterEncoding=UTF-8”和我尝试使用“utf8mb4_unicode_ci”、“utf8mb4_unicode_520_ci”和“utf8mb4_bin”的表列(和表),所有这些都带有结果相同。【参考方案2】:

好的,通过更多帮助和阅读,我需要将“character_set_server=utf8mb4”添加到“/etc/mysql/my.conf”的 MySQL 配置文件中。看起来这是由旧版本的连接器引起的问题。

来自 MySQL 文档(感谢 CfSimplicity 引导我访问该页面)...

对于 Connector/J 8.0.12 及更早版本:为了使用 utf8mb4 字符集进行连接,服务器必须配置为 character_set_server=utf8mb4;如果不是这样,当连接字符串中的字符编码使用UTF-8时,会映射到MySQL字符集名称utf8,即utf8mb3的别名。

【讨论】:

我认为您可以通过将连接器升级到 8.0.13 或更高版本来避免更改服务器配置(尽管从 5.x 升级到 8.x 需要在类名更改时进行测试)。

以上是关于如何使用 Lucee 将 UTF-8 数据插入 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 XML 中的数据插入数据库 [重复]

如何将数据从 JSP 插入 MySQL 数据库?

通过 AJAX 进行 Coldfusion/Lucee 多条件选择

使用 oracle sql developer 将 utf-8 数据导出到文本文件

如何使用过程将值插入数据库

mfc如何将编辑框内容插入sql数据库,编辑框成员m_name,数据库名link,表Table,列name,CDatabase db ??