2014-02-01 2 views
0

Я создал форму, содержащую данные по хинди (UTF-8), которые я хочу хранить в таблице MySQL. Столбцы, соответствующие данным UTF, имеют значение сортировки, установленное на utf_general_ci.Использование UTF и Hindi в CakePHP и MySQL

Я успешно сохранил данные в таблице, но когда я выполняю запрос select-where, он не возвращает данные. Вот мой вопрос:

SELECT Birth. sno, Birth. bookingnumber, Birth. birth_date, Birth. 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. applicant_address, Birth. registration_number, Birth. registration_date, Birth. registration_ward, 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, Birth. father_education, Birth. mother_education, Birth. father_occupation, Birth. mother_occupation, Birth. mother_age_at_marriage, Birth. mother_age_at_birth, Birth. count_of_mother_child, Birth. birth_by, Birth. birth_method, Birth. mother_weight_at_birth, Birth. pregnancy_duration, Birth. date_of_issue ОТ np. births AS Birth ГДЕ Birth. baby_name = 'd' И Birth. baby_father_name = 'e' И Birth. baby_mother_name = 'f' И Birth. baby_father_address = 'g' И Birth. person_religion = 'हिंदू' И Birth. baby_gender = «पुरुष»

Имя базы данных нп и имя таблицы рождения Этот запрос был напечатан в файле журнала. Я попытался скопировать и вставить тот же запрос в HeidiSQL (передняя часть для MySQL), но он не работает. Однако, если я удалю следующую часть: ** И Birth. person_religion = 'हिंदू' И Birth. baby_gender = 'पुरुष' **, запрос работает нормально.

Как решить эту проблему?

ответ

2

Это похоже на случай, когда ваш клиент MySQL и ваш сервер MySQL не «разговаривают» с одной и той же кодировкой.

Есть 3 места, где вам необходимо позаботиться о кодировке.

Веб-форма (то, что видит пользователи) -> Ваш веб-приложения (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 ...)

+0

Ничего себе, спасибо за такой пояснительный ответ, я обязательно посмотрю на него – Ashutosh

+0

Отличное объяснение. –