2013-05-13 91 views
0

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

<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) 

任何人可以帮我存储值在我的数据库,因为它是?

+0

哪种整理是你的数据库? – medina 2013-05-13 06:46:52

+0

我说这是utf8_unicode_ci – 2013-05-13 06:50:38

回答

0

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

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 
+0

我用SET NAMES使用utf8,它完美的工作 – 2013-05-13 10:15:32