我创建了一个包含印地语(UTF-8)数据的表单,我希望将其存储在MySQL表中。与UTF数据对应的列的归类值设置为utf_general_ci
。
我已经成功地将数据存储在表中,但是当我执行select-where查询时,它不会返回数据。这是我的疑问:
选择Birth
。sno
,Birth
。bookingnumber
,Birth
。birth_date
,Birth
。{{1} },baby_gender
。Birth
,baby_name
。Birth
,baby_father_name
。Birth
,baby_father_address
。Birth
, baby_mother_name
。Birth
,birth_place
。Birth
,place_type
。Birth
,applicant_name
。Birth
,{{ 1}}。applicant_address
,Birth
。registration_number
,Birth
。registration_date
,Birth
。registration_ward
,{{1} }。Birth
,registration_city_village
。Birth
,registration_district
。Birth
,remark
。Birth
,mother_place_name
。 Birth
,mother_place_type
。Birth
,mother_place_district
。Birth
,mother_place_state
。Birth
,person_religion
。{{ 1}},Birth
。father_education
,Birth
。mother_education
,Birth
。father_occupation
,Birth
。{{1} },mother_occupation
。Birth
,mother_age_at_marriage
。Birth
,mother_age_at_birth
。Birth
,count_of_mother_child
。Birth
, birth_by
。Birth
,birth_method
。Birth
FROM mother_weight_at_birth
。Birth
AS pregnancy_duration
WHERE Birth
。{{ 1}} ='d'和date_of_issue
。np
='e'和births
。Birth
='f'和Birth
。{{1} } ='g'和baby_name
。Birth
='हिंदू'和baby_father_name
。Birth
='पुरुष'
数据库名称为 np ,表格名称为出生
上面的查询打印在日志文件中。我试图在HeidiSQL(MySQL的前端)中复制并粘贴相同的查询,但它没有运行。但是,如果我删除以下部分:**和baby_mother_name
。Birth
='हिंदू'和baby_father_address
。Birth
='पुरुष'**,查询工作正常
如何解决此问题?
答案 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编码的......)