【问题标题】:How do I insert UTF-8 data into MySQL using Lucee?如何使用 Lucee 将 UTF-8 数据插入 MySQL?
【发布时间】: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)”

标签: mysql utf-8 coldfusion utf8mb4 lucee


【解决方案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 需要在类名更改时进行测试)。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 2013-01-26
  • 2014-01-08
  • 2015-08-09
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多