PHP / MySQL中的字符编码(i /î/ï)

时间:2015-10-21 10:03:46

标签: php mysql

我在使用PHP将角色i(ï/î)加入MySQL数据库时遇到麻烦。我有两个名字,Myîa和Myïa,插入后我只在我的数据库中有Myïa。

表的排序规则设置为utf8_unicode_ci,字段本身也是utf8_unicode_ci。我已检查DEFAULT_CHARACTER_SET_NAME中的SCHEMATA table set to utf8 for the database。{/ p>

database.php中:

$dbs_cnt = mysqli_connect($dbs_hst, $dbs_usr, $dbs_psw, $dbs_nme);
if (!$dbs_cnt) { die(mysqli_connect_error()); }
if (!mysqli_set_charset($dbs_cnt, "utf8")) { echo mysqli_error($dbs_cnt); }

的script.php

header('Content-Type: text/html; charset=utf-8');
include 'database.php';
// irrelevant code
$SQL = "
    INSERT INTO " . $dbs_tbl . " (`Character`)
    VALUES ('" . $CHR_NME . "')
";
if (!mysqli_query($dbs_cnt, $SQL)) { echo mysqli_error($dbs_cnt); }

在我最近遇到这些名字之前,一切似乎都运转良好。

当一条记录已经存在时,尝试在数据库中手动输入它们时,我收到以下错误:

#1062 - Duplicate entry 'Myîa' for key 'PRIMARY' 
#1062 - Duplicate entry 'Myïa' for key 'PRIMARY' 

我一直在玩整理(因为它是latin1_swedish_ci),但这似乎没有帮助。在检查了类似的问题之后,我还添加了标题,但也没有结果。

我错过了什么?

3 个答案:

答案 0 :(得分:1)

我无法发表评论,所以我发送此链接作为答案。我的类似问题通过以下链接解决。 Change MySQL default character set to UTF-8 in my.cnf?

sudo gedit /etc/mysql/my.cnf

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqld]
skip-character-set-client-handshake
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

我重新启动系统并且它有效(可能重启mysql就足够了)。

答案 1 :(得分:1)

将排序规则设置为“utf8_bin”。字形i /ï/î在“utf8_unicode_ci”中是相同的。 (或者选择另一种将这些字母视为不同的校对。)

答案 2 :(得分:0)

连接到mysql后的Rigth,执行以下查询:SET NAMES utf8

如果要将UTF8数据发送到服务器,则需要这样做。