我在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)
有我的数据库了一簇簇?
我知道的是数据被插入到utf8编码中。但为什么? – Adee
当我将名称设置为latin1时,它的行为与utf8相同,当我将名称设置为utf8时,其行为与latin1相同。请帮助 – Adee
'$ data'从哪里来? – Esailija