0

我的网站是用 PHP 和 JavaScript 和 MySQL 数据库生成的。我正在使用 Eclipse Helios 开发和调试代码。

我正在尝试修复当用户从 MicsoSoft Word 剪切和粘贴时应该正常工作的表单。

PHP 应该将输入的文本保存到 MySQL 数据库中,然后我想在从数据库中检索时对其进行清理。

检索和消毒似乎工作正常。但是,存储在数据库中的文本有时与输入的文本不同。

例如,当我输入“baño”时,它会存储为“baño”

我用调试器逐步完成了代码,我可以看到生成的 SQL 代码如下:

insert into table1 set column1 = 'baño'

下一步是:

if (!mysql_query($sql, $db)) { ...

如果我随后使用 phpMyAdmin 查看数据库,或使用 PHP 检索,我会看到 column1 的值为 'baño'

MySQL 使用 latin1_swedish_ci 作为默认值,我尝试将其更改为 utf8_unicode_ci 和 utf8_bin,但没有区别。

类似的代码在其他数据库上也能正常工作。

我究竟做错了什么?

====================

添加:

这是一个包含 100 多个 PHP 文件和 JS 文件的大型网站。数据库服务器有 20 个数据库,其中有几百个表。

我的问题只发生在一个 PHP 文件和一个表中。没有其他代码写入该表,并且该文件不会写入任何其他表。

这是来自 phpMyAdmin 的信息:

MySQL

    Server: Localhost via UNIX socket
    Server version: 5.1.43-log
    Protocol version: 10
    User: root@localhost 
    MySQL charset: UTF-8 Unicode (utf8) 

Web server

    Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7b Zend Core/2.0.1 PHP/5.2.1
    MySQL client version: 5.0.27
    PHP extension: mysql 

phpMyAdmin

    Version information: 3.3.7
4

2 回答 2

1

利用

mysql_query('SET CHARACTER SET charset_name');

在进行查询之前。

另外,您使用的是什么版本的 phpMyAdmin?查看 HTML 源代码中的标头并确保它是 UTF-8。

于 2013-04-05T19:49:55.373 回答
0

经过大量额外的研究和实验,我发现这解决了我的问题:

    mysql_query('SET CHARACTER SET "UTF8";',$db); 

其中 $db 是 *mysql_connect()* 返回的资源。

于 2013-04-10T17:55:26.660 回答