如何在mysql中编码西里尔文?

时间:2010-12-26 15:49:57

标签: php mysql

怎么了? :-)
我有一个问题,我希望你可以帮助我。

我的一个朋友有一个简单的固体html网站,我实现了一点点的PHP;文章的CRUD系统...我遇到的问题是从mysql数据库中放置和获取西里尔字符。

我想要实现的目标是下一个:
在主导航中有一些分隔的部分,其名称,ID和项目的顺序我想放在mysql中,而不是拉取名称并将每个名称作为链接。名字应该是西里尔字符。

当我使用php mysql_fetch_assoc函数尝试显示在数据库行中插入西里尔字符的名称,行的归类为utf8_general_ci,并以{{1}结尾时,问题就来了原创人物。如果我通过提交表单向mysql提交西里尔字符,它会显示类似这样的内容У。

我怎么能解决这个问题,提前谢谢!? : - )

4 个答案:

答案 0 :(得分:9)

确保在连接数据库后调用此方法。

mysql_query("SET NAMES UTF8");

还要确保HTML文件的charset元标记设置为UTF-8或在输出前发送标头。

header("Content-Type: text/html; charset=utf-8");

答案 1 :(得分:2)

在我将表格中的“整理”列编码为“utf8_bin”之前,我遇到了同样的问题。

答案 2 :(得分:1)

如果它真的是mysql fetch assoc搞乱你应该尝试: mysql-set-charset

来自文档:

  

注意:

     

这是改变的首选方式   charset。使用mysql_query()来   执行SET NAMES ..不是   推荐使用。

还要确保您的文件保存为utf8并检查iconv_set_encoding / iconv_get_encoding

答案 3 :(得分:0)

对于从PHP 5.6和MYSQL 5.1到PHP 7之前版本的遗留项目升级更复杂的人。最新的MySQL / Percona / MariaDB等......

如果项目使用 utf8_encode($ value),您可以尝试从正在准备的值中删除该函数,并使用接受的答案为所有输入设置UTF-8编码。

---或---

尝试将 utf8_encode($ value)替换为 mb_convert_encoding($ value,'utf-8')

PDO用户

如果你正在使用PDO,有两种方法可以设置utf8:

$options = [
    \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
];

new \PDO($dsn, $username, $passwd, $options);

---或---

$dsn = 'mysql:host=localhost;charset=utf8;'

new \PDO($dsn, $username, $passwd);

我可以使用 utf8_unicode_ci 确认 mb_convert_encoding($ value,'utf-8')到SQL表适用于 Cyrillic 元音变音