执行失败:字符串值不正确:'\xD6sterl...' 使用 mariadb 和 perl DBD

2024-01-21

我是一名新手 Perl 程序员,试图使用 DBI 将包含带有变音符号和其他非 ASCII 字符的电子邮件的文本缓冲区写入 joomla 数据库,但遇到了问题。

DBD::mysql::st execute failed: Incorrect string value: '\xD6sterl...' for column `lsv5webstage`.`xuxgc_content`.`fulltext` at row 1 at /home/alerts/scripts_linstage/AdvisoryTest.pm line 373.

我不太熟悉编码的工作原理,无法完全理解问题所在。这是一个带mariadb-10.3.12和joomla-3.9的fedora29系统。

显然,“\xD6”是“Sebastian �sterlund”中带有变音符号的 O。我读到一些关于 utf8 无法处理 4-char 的内容,但我不完全理解。

我在网上找到了以下参考资料,其中讨论了将编码类型从 utf8 更改为 utf8mb4,但所有表似乎都已经在使用该编码:

> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR 
Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

我不确定它是否有帮助,但这是我在 Perl 代码中使用的插入语句:

    my $sql                 = <<EOF;
    INSERT INTO xuxgc_content (title, alias, introtext, `fulltext`, state, catid, created, created_by, created_by_alias, modified, modified_by, checked_out, checked_out_time, publish_up, publish_down, images, urls, attribs, version, ordering, metakey, metadesc, metadata, access, hits, language)
    VALUES ($title, "$title_alias", $introText, $fullText, $state, $catid, $created, $created_by, $created_by_alias, $modified, $modified_by, $checked_out, $checked_out_time, $publish_up, $publish_down, $images, $urls, $attribs, $version, $ordering, $metakey, $metadesc, $metadata, $access, $hits, $language);
    EOF

    my $sth = $dbh->prepare($sql);
    $sth->execute();
    db_disconnect($dbh);

$fullText 变量是从包含电子邮件正文的缓冲区填充的。在执行 INSERT 之前,我通过 quote() 运行它。

$fullText       = $dbh->quote($fullText);

我还尝试使用“SET NAMES utf8mb4;INSERT INTO Mytable ...;”它只是不喜欢这种格式。

这是用于连接数据库的完整函数:

sub db_connect () {
  my %DB        = (
    'host'  => 'myhost',
    'db'    => 'mydb',
    'user'  => 'myuser',
    'pass'  => 'mypass',
  );

  return DBI->connect("DBI:mysql:database=$DB{'db'};host=$DB{'host'}", $DB{'user'}, $DB{'pass'}, { mysql_enable_utf8mb4 => 1 });
 }

我不记得过去有过这个问题,而且这个脚本已经使用了很长一段时间了。


D6是十六进制Ö in CHARACTER SET latin1(以及其他几个)。

您已声明您的客户使用UTF-8(utf8mb4)编码,所以它向你吐口水。

请提供SELECT HEX(col), col ...看看是否D6进入数据库(因此insert问题)或其他问题(可能是获取/显示问题)。

另外,你还没有引用你的$fulltext字符串,因此您可能会遇到各种语法错误。

请不要盲目将字符串放入INSERT语句,但在放入它们时将其转义。

这里可能有一些有用的 Perl 提示:

    use utf8;
    use open ':std', ':encoding(UTF-8)';
my $dbh = DBI->connect("dbi:mysql:".$dsn, $user, $password, {
   PrintError => 0,
   RaiseError => 1,
   mysql_enable_utf8 => 1,  # Switch to UTF-8 for communication and decode.
});
# or {mysql_enable_utf8mb4 => 1} if using utf8mb4

并寻找绑定/引用/转义的技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行失败:字符串值不正确:'\xD6sterl...' 使用 mariadb 和 perl DBD 的相关文章

  • 指定 iframe 中加载的页面的字符集

    我想知道 是否可以为加载的 iframe 提供自定义字符集 例如 如果我有一个名为www example com带有源代码 Test 现在我有一个名为 www example2 com 我想做的是加载www example com in a
  • 如何使用 -fPIC 标志重新编译 libperl.a 目标文件?

    当试图修复一些问题时出现了这个问题安装问题 https stackoverflow com q 43191675 2173773 with QtCore4 https metacpan org pod QtCore4 在某一点make尝试运
  • Perl 使用什么哈希函数/算法?

    有人能解释一下 Perl 用于将字符串映射到索引的哈希函数 算法吗 有相关读物吗 这个答案早于 5 28 中进行的哈希函数更改 请参阅 默认哈希函数更改 perldelta 为 5 28 http perldoc perl org perl
  • 如何按给定顺序对列表进行排序?

    我正在尝试执行以下操作 我有一个预定义的列表 用作给定列表上的 排序依据 my orderby car boat chicken cat dog mouse or my orderby car gt 0 boat gt 1 chicken
  • 我应该如何使用 Perl URI 类?

    我需要在 Perl 程序中处理一些 HTTP URL 但我怀疑应该如何处理URI https metacpan org module URI类帮助我 特别是 我想使用URI用于解析相对 URL 并获取其组件的类 然而 问题是 我需要一个可以
  • 当与不需要虚拟机的编译程序一起使用时,CGI 是否仍然很慢?

    当我学习 CGI 时 我了解到任何编程语言都可以用来将其输出挂钩到 http 响应消息 而它的输入是 http 请求消息 我读过的很多文章都在 Perl 的背景下讨论 CGI 这是因为 Perl 是与 CGI 结合使用的最常见的语言吗 我想
  • 如何在经典 ASP 中将 Windows-1255 转换为 UTF-8?

    如何将 windows 1255 字符串转换为 utf 8classic应用服务提供商 我的数据库是 windows 1255 我想将我的网站转移到 utf 8 代码是否在这个答案 https stackoverflow com quest
  • python 2.7 字符 \u2013 [重复]

    这个问题在这里已经有答案了 我有以下代码 coding utf 8 print u William Burges 1827 81 was an English architect and designer 当我尝试从cmd运行它时 我收到以
  • 是否可以使用perl读取pdf文件中的文本?

    我想在 perl 中解析 pdf 文件中的文本 而不将 pdf 转换为任何其他格式 是否可以 是的你可以 看看CAM PDF http search cpan org dist CAM PDF 包裹 您可以使用此模块来提取文本 my pdf
  • Perl:避免从标准输入贪婪读取?

    考虑以下 perl 脚本 read pl my line
  • 我需要一个便携式、一致的伪随机数生成器

    I am writing a kid sister encryption http enfranchisedmind com blog posts the kid sister crypto manifesto function and I
  • 如何让 XSLT 在 Java 中返回 UTF-8

    我正在尝试让我的 XSL 脚本使用 UTF 8 编码 像 和希腊字符这样的字符就像垃圾一样出现 让它工作的唯一方法是将结果写入文件 如果我将它写入输出流 它只会返回垃圾 System out 有效 但这可能是因为它被重定向到文件 结果需要从
  • json_encode() 非 utf-8 字符串?

    所以我有一个字符串数组 并且所有字符串都使用系统默认值ANSI编码并从 SQL 数据库中提取 因此有 256 种不同的可能的字符字节值 单字节编码 有什么方法可以让我得到json encode 工作并显示这些字符而不必使用utf8 enco
  • Perl - HTTP::代理捕获 XHR/JSON 通信

    网站http openbook etoro com main http openbook etoro com main 有一个实时提要 由 javascript 通过 XHR keep alive 请求生成 并以 gzip 压缩 JSON
  • Perl Mongo 查找对象 ID

    你会认为这是一件简单的事情 我有一个集合中的对象 ID 列表 我想根据对象 ID 获取单个记录 谷歌搜索过 但没有任何帮助 所以我有对象 ID 5106c7703abc120a04070b34 my client MongoDB Mongo
  • 哪一个代表null? undef 或空字符串

    我想插入null在表的一列中 哪一个代表null undef或空字符串 应该使用哪一种 为什么 我知道关于defined我可以检查一下 但我更多的是从数据库的角度来看 代表哪一个null更合适吗 Update 我在用DBI module D
  • perl imap 将邮件移至垃圾箱 (Mail::IMAPClient)

    我需要将所有未见的邮件移至垃圾箱 然后从收件箱中删除 my inbox imap gt select Inbox my mails imap gt unseen foreach my msgid mails imap gt set flag
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • 如何使用 Perl 从 NCBI 获取 FASTA 核苷酸格式的基因特征?

    我可以手动下载 FASTA 文件 如下所示 gt lcl CR543861 1 gene 1 ATGCTTTGGACA gt lcl CR543861 1 gene 2 GTGCGACTAAAA 通过单击 发送到 并选择 基因特征 FAST
  • 将传入字符串的 unicode 表示形式转换为 UTF-8?

    我正在读取一些已经转换为 html 样式 代码的数据 我现在需要将其转换回 UTF 8 字符以供查看 不幸的是我无法使用浏览器查看该字符串 我读过有关 java 中的转换的内容 似乎如果你有一个 uxxxx 字符串 那么编译器会为你转换 然

随机推荐