2013-04-12 29 views
1

我在Windows 7上使用PHP 5.3.4,Apache 2.2.17,MySql 5.1.53上的Wamp服务器2.1。错误的编码保存在MySql数据库.. Windows 7中,Wamp服务器

的httpd.conf:AddDefaultCharset “ISO-8859-1”

的php.ini:DEFAULT_CHARSET = “ISO-8859-1”

我使用的PHP的mysqli类中插入数据在一个表latin1编码和latin1编码列,latin1_swedish_ci整理。在php文件中,我通过元标记将charset设置为ISO-8859-1,使用accept-charset =“ISO-8859-1”属性渲染表单。我使用mysqli :: set_charset将数据库连接的字符集设置为latin1,但仍然输入的数据已损坏。根据我的理解,数据是有效的latin1字符。

的代码:被损坏

$dbMain->set_charset('latin1'); 
$query = "INSERT INTO `table` (" . implode(',', array_keys($data)) . ") VALUES ('" . implode("','", array_values($data)) . "')"; 
$dbMain->query($query); 

的数据: “字符A,O,U,A,ö,ü,和SS铺PRODUKTE献给死Elektronik公司”

当我通过latin1连接读取数据,它会给我带来垃圾(带有问号的黑色菱形),而不是我插入的数据。当我通过utf8连接读取数据时,它会显示我正确的字符。 同样在SqlYog(MySql客户端)..如果我运行“SET NAMES latin1”并浏览表格,我会看到barbage字符。如果我运行“SET NAMES utf8”并浏览表格,我会看到正确的文字。这里有什么问题?

更新:

我跑的MySQL客户端以下查询:

SET NAMES latin1; 
SELECT my_column,HEX(my_column) FROM my_table; 

,得到了这样的结果

|my_column|HEX(my_column)| 
-------------------------- 
| ß |  C39F  | (entered manually from MySql client) 
| � |  DF  | (entered from php via latin1 connection) 

有我的数据库了一簇簇?

+0

我知道的是数据被插入到utf8编码中。但为什么? – Adee

+0

当我将名称设置为latin1时,它的行为与utf8相同,当我将名称设置为utf8时,其行为与la​​tin1相同。请帮助 – Adee

+0

'$ data'从哪里来? – Esailija

回答

2

有几件事情是很重要的:

  • 什么是你在阅读/观看从数据库中的数据使用的编码?
  • 你是如何从数据库中查看你的数据的?通过MySQL管理员或一些PHP脚本或HTML页面?
  • 什么编码在浏览器中设置呢?
  • 什么编码你保存你的PHP文件?

你有没有想过编码转换?我想帮助你,因为我花了一些时间关于latin2和utf8编码(波兰语),但我需要从你那里获得更多信息。

+0

1. latin1。 2. SqlYog(MySql客户端)和HTML通过PHP脚本。在这两种情况下,我都将连接名称设置为latin1。我将php的字符编码设置为ISO-8859-1,并且使用ISO-8859-1字符集呈现元标记。 3.在回应标题中,我看到ISO-8859-1。 4. php文件保存在ANSI中,但在将PHP和html文件编码转换为ISO-8859-1之后,我也尝试了相同的方法。但结果没有区别。 – Adee

+0

告诉我在创建表时已经设置了什么编码? –

+0

表以及列与latin1_sweedish_ci归类latin1 – Adee

0

好吧!完全没有保存这些值的问题。在这两种情况下,都是导致问题的检索。

在MySql客户端的情况下,问题是当我使用utf8连接作为客户端的默认连接时,客户端仅显示存储的正确值。可能是客户端的UI只能使用utf8编码。

如果是HTML响应,PHP文件的编码是ISO-8859-1,但.html模板文件是以UTF-8编码保存的。该网站使用传统的解析器来解析模板,所以当它从UTF-8文件中获取内容并进行解析时,ISO-8859-1数据就会被破坏。将.html文件的编码更改为ISO-8859-1解决了该问题。

谢谢大家帮助我。我真的很感激。我希望你不要生气

+1

你为什么不把所有的东西都改成UTF-8? –

+0

那么是因为数据库可能包含数百万个记录集群在许多数据库服务器上。更多的停机时间,更多的风险等等 – Adee