为什么数据库结果不显示重音?

时间:2014-08-12 20:23:03

标签: php mysql codeigniter character-encoding

我正在将项目从名为“Freekore”的CMS迁移到CodeIgniter,使用我的旧CMS我没有遇到此问题但是CI我无法弄清楚为什么我遇到特殊字符问题{{1等等 我想我已经尝试了一切。
我在标题中得到了这个

ñ,á,é,í

还添加了这个

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
数据库配置

<?php header('Content-Type: text/html; charset=UTF-8'); ?>

和配置文件

$db['local']['char_set'] = 'utf8';
$db['local']['dbcollat'] = 'utf8_general_ci';

但我还是得到了这个

$config['charset'] = 'UTF-8';

而不是

COMUNICACIÓN Y PRODUCCIÓN EDITORIAL

啊,并将此添加到.htaccess

COMUNICACIÓN Y PRODUCCIÓN EDITORIAL

修改
使用this我发现当前字符集是AddDefaultCharset UTF-8 但是怎么样?我检查了数据库和表格,并且latin1

编辑2
我做了一个新的数据库并检查了每个列的排序规则,现在我在数据库,每个表和行上使用utf8_general_ci,但我仍然有同样的问题当前字符集是{{1 }}

编辑3
我决定使用utf8_unicode_ci似乎工作但我仍然有大写字母的问题

6 个答案:

答案 0 :(得分:1)

在使用此函数将数据放入新数据库之前,您是否尝试使用UTF-8对数据进行编码:http://www.w3schools.com/php/func_xml_utf8_encode.asp

答案 1 :(得分:1)

在数小时内搜索可帮助我解决问题的内容后,我发现答案非常简单in this post所以在执行插入之前我使用了此mysql_query("SET NAMES utf8");,现在字符显示为应有的。非常感谢你的帮助。

答案 2 :(得分:0)

数据库表本身的排序规则不是UTF-8 unicode。在这里查看例如phpmyadmin:

enter image description here

您需要更新排序规则。如果您没有phpmyadmin,可以使用以下命令:

ALTER TABLE `test_table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

答案 3 :(得分:0)

我认为您需要将数据库集合更改为UTF 8 执行以下查询。

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

希望它能解决你的问题。

答案 4 :(得分:0)

您的问题很可能是utf8_general_ci(MySQL 5.x默认值)作为整理。大多数人都对所有UTF8都不一样感到惊讶。在大多数情况下,你有3种一般的“味道”

  • utf8_general_ci
  • utf8_unicode_ci
  • utf8mb4

区别在于UTF8使用了多少字节。 utf8mb4是完整的UTF8字符集,而utf8_general_ci是涵盖大多数拉丁字符集的小子集,但可能不包括您提到的字符。如果您切换到utf8_unicode_ci,则可能会覆盖它们。问题在于,您使用的字节越多,数据库在处理数据时运行的速度就越慢。

该主题更详细地讨论了它。 What's the difference between utf8_general_ci and utf8_unicode_ci

答案 5 :(得分:0)

Echo utf8_encode($ row ['$ your_field']);