如何在数据库查询中保持字符编码

How to keep character encoding with database queries

我正在做以下事情。

1) 我正在导出数据库并将其保存到名为 dump.sql 的文件中。

2) 然后通过 PHP ftp 将文件传输到不同的服务器。

3) 文件传输成功后,管理员可以选择在新主机上运行 \\'dbtransfer\\' 脚本。

4)这个脚本炸毁了脚本并逐行运行查询。

这很好用 - 但是外语编码存在问题。我们正在使用 UTF-8。

第 1 步:这很好,文件是 UTF-8 格式。

第 3 步:当我使用 mb_check_encoding() 测试 dump.sql 文件的内容时。该字符串以 UTF-8 形式返回。

第 4 步:这将创建具有 utf8_general_ci 编码的表。信息被转储进来。

当我在转移后检查表时,我得到如下记录:\\'?§,??,??,?–,??,??,?±,?°,??,??,? ?,??\\'。我不明白 UTF-8 字符串在进入数据库时??如何丢失其编码。我错过了一步吗?我是否需要运行某种函数来确保字符串被解析为 UTF-8?

安装系统后,我可以保存外语查询。只是传输搞砸了。

有什么想法吗?


在我连接到 PHP 中的数据库后,我总是在连接对象上执行以下查询,以确保连接使用 UTF-8:

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\'');
SET NAMES 'utf8';

另一个选项是目标表不是 UTF-8。


不清楚您是如何执行所有这些步骤的,但让我们试一试。

首先,确保所有与字符集相关的数据库连接设置都设置为 utf-8。有一些在数据库端,也有一些在客户端。

其次,在插入任何数据之前,请执行以下查询:

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\'');
SET NAMES 'utf8';

很可能,您没有告诉 MySQL 您正在与它进行 UTF-8 通信——连接的字符集错误。为此使用 mysql_set_charset 函数。

另请注意,utf8_general_ci 不是编码 - 它是排序规则。换句话说,它只告诉 MySQL 在比较值时(包括排序时)应该如何处理该列。


相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161