php - 在 MySQL 中插入字符串的问题

标签 php mysqli

好吧,我试着解释一下,但请原谅我的英语。

我有一个脚本将整个数据库转储到一个 SQL 文件中,然后另一个脚本拆分行并执行它们以删除、创建和插入数据。 问题是一些字符串被“修剪”了。它只是插入字符串,直到它到达第一个特殊字符,例如:

对于字符串:

"Pantalon azul marino de Poliéster con cinta blanca bordada con el nombre de la institución en uno de sus costados."

它只是插入:

 "Pantalon azul marino de Poli"

没有抛出错误。但这只发生在使用脚本时,但是当我手动运行查询并在 phpMyAdmin 中导入 SQL 文件时,一切正常。 顺便说一句,一切都设置为utf8。

我没有想法,任何帮助将不胜感激。

    include ('../core/connection.inc.php');
    $conn = dbConnect('admin');
    $conn->query("SET NAMES 'utf8'");
    $conn->set_charset("utf8");
    $type = 0;

    // Temporary variable, used to store current query
    $templine = '';
    // Read in entire file
    $lines = file('db-backup.sql');
    // Loop through each line
    $correct = 0;
    $failed = 0;
    foreach ($lines as $line){
    // Skip it if it's a comment
    if (substr($line, 0, 2) == '--' || $line == '')
        continue;
    // Add this line to the current segment
    $templine .= $line;
    // If it has a semicolon at the end, it's the end of the query
    if (substr(trim($line), -1, 1) == ';'){
        $templine = str_replace("latin1","utf8",$templine);
        $templine = trim($templine);

        // Perform the query
        $conn->query($templine);
        $errno = $conn->errno;
        $error = $conn->error;
        if($conn->affected_rows > 0){
            echo "OK: (".$templine.")<br/>";
            $correct++;
        } else {
            echo "Failed: (".$templine.")<br/>";
            echo "&nbsp;&nbsp; Errno: ".$errno." <br/>";
            echo "&nbsp;&nbsp; Error: ".$error." <br/>";
            $failed++;
        }
        $templine = '';
    }
    }

最佳答案

我猜您正在导入的转储文件不是 UTF-8。

PHP 在不进行任何转换的情况下将字节从文件传输到 MySQL。根据您所做的更改,文件中的 é 字符可能位于 latin1 中,可能由值 > 127 的单个字节表示。这不是 UTF -8。您已向 MySQL promise 您将发送有效的 UTF-8,并且当它到达无效字节时它会停止读取字符串。

您可能会考虑:

  • 将转储文件重新编码为 UTF-8
  • 找出转储文件的编码,并使用该编码将其加载到 MySQL 中

我个人认为我会以不同的方式解决这个问题:

  1. 使用命令行客户端或类似工具将转储文件加载到 MySQL 中。你知道这行得通。
  2. 在导入后改变每列的字符集 - 您可以使用 information_schema 中的数据来组装 ALTER TABLE 语句并让 MySQL 正确地进行转换。<

关于php - 在 MySQL 中插入字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594378/

相关文章:

php - 如果已经使用了 mysql_select_db,你能对两个数据库进行查询吗?

php - 是否可以从 php 中的转发电子邮件中检索原始 header

javascript - 带有 php 的 SublimeLinter javascript

php - 使用php将表单中的数据填充到数据库中

php - 查看 mysql 中是否返回行的不同方法?

php - php中mysqli字符串中的多词匹配

php - 使用复选框更新 MySql 数据库

php - Phalcon ORM : How to get all records with relations

php - 使用php向上/向下移动MySQL行的位置

php - MYSQLI - 数组中的位置