【发布时间】:2020-12-09 05:10:01
【问题描述】:
我在开发一个项目时遇到问题,我无法放置重音字符。
我用于连接 MySQL 数据库,Adodb 版本为 5.20.14。
我有一个主配置文件,其中连接设置如下:
$s_driver = "mysqli";
$o_db = adoNewConnection($s_driver);
$o_db->connect($s_dbhost,$s_dbuser,$s_dbpasswd,$s_dbname);
$o_db->SetFetchMode(ADODB_FETCH_ASSOC);
$o_db->setCharset("utf8");
所有开发的文件都是 UTF-8 编码的,如下图所示:
注意:我使用 VsCode。
所有作为页面的 PHP 文件,都将字符集元设置为 utf-8,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
我的数据库配置为utf8,如下图所示:
表配置为 utf8 字符集,如下图所示:
列配置为 utf8 字符集,如下图所示:
注意:我添加了“NOT NULL”规则来忽略没有字符集配置的表。
在执行查询以将信息包含在数据库中时,我运行如下:
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->execute($s_query_incluir);
注意:在文件的顶部,我包含了包含第一张图片中显示的信息的配置文件。
执行此操作后,数据库显示信息如下:
在网站上查看信息时,显示如下:
原文是这样的:
我设法通过在查询中给出“执行”之前添加“setCharset”来使其工作,如下图所示:
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->setCharset("utf8");
$o_db->execute($s_query_incluir);
在 MySQL 中实现以下结果:
我想知道我哪里出错了。我正在尝试使 utf8 “自动”,而不必在执行任何类型的查询之前调用“setCharset”。
感谢任何形式的帮助。 :)
注意:如果您需要有关该过程的更多信息以更好地了解问题,请告诉我。
【问题讨论】:
-
参见stackoverflow.com/questions/38363566/… 中的“Mojibake”。并执行建议的
SELECT HEX(col)...以帮助确定在INSERT或以后的文本是否出现乱码。 -
我不记得听说过有人使用 adodb。它有什么优势?
-
setCharset在幕后做了什么? (这很关键。)
标签: php mysql utf-8 collation adodb