在CakePHP和MySQL中使用UTF和Hindi

时间:2014-02-01 07:55:06

标签: mysql cakephp utf-8 hindi

我创建了一个包含印地语(UTF-8)数据的表单,我希望将其存储在MySQL表中。与UTF数据对应的列的归类值设置为utf_general_ci

我已经成功地将数据存储在表中,但是当我执行select-where查询时,它不会返回数据。这是我的疑问:

选择BirthsnoBirthbookingnumberBirthbirth_dateBirth。{{1} },baby_genderBirthbaby_nameBirthbaby_father_nameBirthbaby_father_addressBirthbaby_mother_nameBirthbirth_placeBirthplace_typeBirthapplicant_nameBirth,{{ 1}}。applicant_addressBirthregistration_numberBirthregistration_dateBirthregistration_ward,{{1} }。Birthregistration_city_villageBirthregistration_districtBirthremarkBirthmother_place_nameBirthmother_place_typeBirthmother_place_districtBirthmother_place_stateBirthperson_religion。{{ 1}},Birthfather_educationBirthmother_educationBirthfather_occupationBirth。{{1} },mother_occupationBirthmother_age_at_marriageBirthmother_age_at_birthBirthcount_of_mother_childBirthbirth_byBirthbirth_methodBirth FROM mother_weight_at_birthBirth AS pregnancy_duration WHERE Birth。{{ 1}} ='d'和date_of_issuenp ='e'和birthsBirth ='f'和Birth。{{1} } ='g'和baby_nameBirth ='हिंदू'和baby_father_nameBirth ='पुरुष'

数据库名称为 np ,表格名称为出生 上面的查询打印在日志文件中。我试图在HeidiSQL(MySQL的前端)中复制并粘贴相同的查询,但它没有运行。但是,如果我删除以下部分:**和baby_mother_nameBirth ='हिंदू'和baby_father_addressBirth ='पुरुष'**,查询工作正常

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

这看起来就像你的MySQL客户端和你的MySQL服务器没有“说话”相同的编码。

您需要有3个地方需要处理您的编码。

网络表单(用户看到的内容) - >您的Web应用程序(CakePHP) - >您的数据库服务器(MySQL)

其中一个不使用与其他编码相同的编码。那么到时候:

“'हिंदू'”和“'पुरुष'”进入你的数据库,它们将是完全不同的东西,在数据库中找不到。

因此,请确保在default.ctp文件中设置了编码:

echo $this->Html->charset(); //这将导致页面的UTF-8编码。

查看您网页的源代码(我猜您有搜索/过滤器表单)。

在顶部你应该看到:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

然后查找为您的搜索/过滤器表单生成的代码。你应该看到:

<form id="your_form_id" accept-charset="utf-8" method="post" action="/your/action/">

重要的一点是“utf-8”必须出现在那些地方。

接下来,查看您的database.php文件并确保此行:

'encoding' => 'utf8',未被注释掉!

最后,对于您确定支持UTF-8(可能是HeidiSQL)的客户端,请查看您的数据表np.births,并确保您拥有的数据确实有意义!由于编码之前的差异,它可能会被破坏。

一旦数据在数据库中有意义,你应该好好去!

如果这不是你,你必须阅读并彻底理解this article。只有这样,您才能找到问题所在,并使您的编码保持同步。 (显然你的PHP源文件也应该是UTF-8编码的......)