立陶宛字符未正确保存到MySQL DB中

时间:2014-05-22 04:13:34

标签: php mysql xml utf-8

我再次遇到将特殊字符保存到数据库中的问题。经过大量的搜索,我仍然无法找到解决方案,所以我开始了一个新的线程。

我使用UTF-8字符集和PHP应用程序将MySQL数据从XML文件读入数据库。早些时候我遇到了爱沙尼亚人的问题,我设法解决了这个问题。例如& scaron; (š)是XML格式的html实体& ETH;它用PHP转换为& #353 ;.在早期的PHP脚本中我运行mysql查询“SET NAMES utf8”。 š正确保存到DB中。

现在我正在与立陶宛字符作斗争,例如ų(&#371),这是一个数字实体,& #371;,在XML文件中。我没有在PHP中进行任何转换,因为我假设当& ETH;转换为& #353;与scaron合作,不应该& #371;保存到数据库为ų没有PHP转换?保存后出现在DB中作为问号,如果我尝试使用mb_convert_encoding()或html_entity_decode(),结果是ų。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你应该确保你的表具有正确的编码并在连接后运行SET名称。

我准备了简单的测试。尝试运行它以确保一切正常。

1)创建数据库testencoding并将以下代码导入

CREATE TABLE IF NOT EXISTS `sample` (
`id` int(11) NOT NULL,
  `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

--
ALTER TABLE `sample`
 ADD PRIMARY KEY (`id`);

2)创建包含以下内容的简单PHP脚本并运行它:

<?php

header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
$subjectvalue='&#371; ų';



$link = mysqli_connect("localhost","root","","testencoding");
mysqli_query($link,"SET NAMES 'utf8'");
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue)."')");


$result = mysqli_query($link, "SELECT * FROM sample");
echo "<br /><br />Data from database<br /><br />";
while ($data = mysqli_fetch_assoc($result)) {
    echo $data['id'].' '.$data['value']."<br />";
}

3)在我的电脑上,所有结果都符合预期:

作为PHP文件的输出,我有:

Data from database

1 ų ų

在phpMyadmin中我有:

&#371; ų

所以一切正常。试一试并与我的结果进行比较