2

我使用以下代码在我的数据库中存储和更新数据。

<?php
header("Content-Type: text/html;charset=UTF-8", true);
mysql_connect("localhost", "test", "test") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());

    // mysql_set_charset('UTF8');
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");




    mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
    or die(mysql_error());  

代码运行良好。但是如果字符串,例如 "city" 包含 ä,ö,ü 它被存储为 ? 例如,单词“Bär”转到“B?r”。

我已经添加了这些 utf8 的东西,但它没有帮助。服务器只支持php4.x

编辑:数据库使用 latin1_general_ci 作为排序规则。

4

4 回答 4

0

保留 ut8_unicode_ci 并将其添加到您的 php 代码中:

mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection); 

我到处都在使用它(西里尔文、中文等),它适用于每个查询(插入或更新)。

 <?php
        header("Content-Type: text/html;charset=UTF-8", true);
        $connection = mysql_connect("localhost", "test", "test") or die(mysql_error());

        mb_language('uni');
        mb_internal_encoding('UTF-8');
        mysql_query("set names 'utf8'",$connection);

        mysql_select_db("test") or die(mysql_error());
        mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
        or die(mysql_error());  
于 2012-11-24T20:30:53.893 回答
0

我让它工作了。我对这种行为没有任何解释。我已将 php 文件从 utf8 更改为 latin1:

mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");

在 MySQL 数据库中,表和列的排序规则是 utf8_unicode_ci。

它现在适用于 € 符号旁边的所有字符。

于 2012-11-25T12:47:11.567 回答
0

使用 utf8 作为排序规则,也许utf8_bin或者utf8_unicode_ci

(ci 表示它不区分大小写,因此像 "John" = "JOHN" 这样的比较返回 true)。您可以通过在 MySQL 中运行以下查询来执行此操作:

alter table `test`.`english` convert to character set utf8 collate utf8_unicode_ci;
于 2012-11-24T15:27:23.973 回答
0

将表排序规则更改为utf8_bin.

要更改包含现有列的表的默认字符集和排序规则(注意 convert to 子句):

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin

utf8_general_ci

ä = a
ö = o
ü = u

但在utf8_bin

ä != a
ö != o
ü != u
于 2012-11-24T15:27:28.203 回答