Php codeigniter将土耳其语字符保存到mysql

时间:2011-05-21 21:32:04

标签: php mysql codeigniter encoding turkish

我正在使用PHP Codeigniter编写一个Web应用程序。我收到可以使用任何语言的输入,并将其保存在我的数据库中。

MYSQL DB排序规则设置为utf8_unicode_ci。 对于database.php中的codeigniter,我设置了这个:

$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_unicode_ci';

当我在我的数据库上运行以下插入时:

insert into user (name,id) values ('John Temirtaş', 2)

我收到此错误:

  

字符串值不正确:第1行第'name'列的'\ xC5 \ x9F'

s有问题。它具有土耳其特色。

到目前为止,我在调试时尝试了这个

print_r($name)
John Temirtaş

print_r("Encoded Name: ".utf8_encode($name))
Encoded Name: John TemirtaÅ

print_r("Decoded Name".utf8_decode($name)
Encoded Name: John Temirta?

print_r("Decoded-Encode Name: ".utf8_decode(utf8_encode($name)))
Decoded-Encode Name: John Temirtaş

我已经尝试在数据库中保存JohnTemirtaÅ,但它运行正常。所以我想我可能会utf8_encode($name)将它保存在DB和utf8_decode中,然后再显示它。只是做后者将无法正常工作。您需要将mb_internal_encoding("UTF-8");添加到PHP脚本的顶部。

如何正确编码数据以便插入数据?


感谢你们所有人帮助你们工作了什么!

  1. 打开MySql工作台。设置 字符编码和校对 用户表。 Charset:utf-8 整理:utf8_unicode_ci
  2. 设置名称列的排序规则 到 utf8_unicode_ci 。完成。该 插入应该工作。
  3. 感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

在运行插入查询之前,请先尝试运行以下查询:

mysql_query("SET NAMES 'utf8'");

并看看是否有帮助。

答案 1 :(得分:1)

你做的一切都还好。我来自土耳其,在我开发的每个项目中,我都在检查这些东西:

  • 使用 UTF8编码保存 php文件
  • 我的表格及其字段是否与 utf8_unicode_ci
  • 进行了整理

请勿更改codeigniter的“char_set”“dbcollat​​”选项。

如果你这样做,应该没有问题。

答案 2 :(得分:1)

在将记录插入数据库之前尝试此操作。

$this->db->db_set_charset('latin1', 'latin1_swedish_ci');

// -> latin1- Charset & 
// -> latin1_swedish_ci - Collation

确保在表格和表格列的DB中具有相同的设置。

答案 3 :(得分:0)

也许我不能完全回答你的要求,但我可以给出一些一般的提示,因为我使用utf-8自我。

  1. 尝试从某个客户端手动输入此字符(heidisql是免费的)。

  2. 当我使用GET时,事情效果不好但是使用htmlencode,htmlspecialchars ..使用这些函数它可以正常工作。

  3. 后来我只使用POST,所以不需要编码,我已经实现了utf-8自动完成工作正常。

  4. 我觉得在插入之前尝试编码和var_dump sql是值得的,以确保输入的内容。

    1. 在一些复杂的情况下,存储在变量中的引号对我来说非常方便,例如:

      $ DBQ = “\”“; $ sql = $ dbq .'some sql'。 $ DBQ;

    2. 我使用PHP PDO,到目前为止从未遇到过utf-8的问题。希望这对你有所帮助!

      我忘了..你说codeIgniter ..手工输入一个值会保证你至少在哪里聚焦,数据库或框架(幸运的是我使用我的mvc)。只是尝试深入了解mvc代码,看看在插入之前sql是什么样的。