0

我有一个 php 代码,它解析 XML 文件并将解析的信息存储在我的 Linux 服务器上的数据库(MySQL)中。我所有的表排序规则都是“utf8_unicode_ci”,即使我的数据库排序规则是“utf8_unicode_ci”我的 XML 文件中有很多语言(土耳其语、瑞典语、法语……),我希望将这些语言中的特殊字符存储在它们的原始形式,但我的问题是这样的 XML 模式:

<match date="24.08.2012" time="17:00" status="FT" venue="Stadiumi Loro Boriçi (Shkodër)" venue_id="1557" static_id="1305963" id="1254357">

场地值将像这样存储在我的数据库中:

Stadiumi Loro Boriçi (Shkodër)

任何人都可以帮助我将值存储在我的数据库中吗???

4

1 回答 1

0

尝试在查询前使用“SET NAMES utf8”命令。正如手册所说:

SET NAMES 指示客户端将使用什么字符集将 SQL 语句发送到服务器。

我试图模仿你的情况。创建了一个表 test1:

DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `value` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

并尝试插入带有法语特殊字符和中文的字符串。对我来说,即使没有SET NAMES.

<?php
$str = "çëÙùÛûÜüÔô汉语漢語";

try {

      $conn = new PDO('mysql:host=localhost;dbname=test', 'user', '');
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      $conn->exec("SET NAMES utf8");
      $stmt = $conn->prepare('INSERT INTO test1 SET value = :value');
      $stmt->execute(array('value' => $str));

      //select the inserted row
      $stmt = $conn->prepare('SELECT * FROM test1 WHERE id = :id');
      $stmt->execute(array('id' => 1));
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            print_r($row);
      }
}
catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage();
}

它工作正常,打印:

Array
(
    [id] => 1
    [value] => çëÙùÛûÜüÔô汉语漢語
)

此外,当您进行测试时,不要直接从控制台读取,将输出重定向到文件并使用文本编辑器打开它:

php test.php > 1.txt
于 2013-05-13T09:22:17.523 回答