我有一个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)
任何人都可以帮我将值存储在我的数据库中,因为它是???
答案 0 :(得分: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