Использование UTF и хинди в CakePHP и MySQL

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

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

ВЫБЕРИТЕ 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.Birth, Birth.Birth, Birth.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._509_ , 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.Birth КАК np.Birth = 'd' И Birth.baby_father_name = 'e' И Birth.baby_mother_name = 'f' И Birth.baby_father_address = 'g' И Birth.person_religion = 'हिंदू' И Birth.baby_gender = 'पुरुष'

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

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


person Ashutosh    schedule 01.02.2014    source источник


Ответы (1)


Это похоже на случай, когда ваш клиент 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 и убедитесь, что те данные, которые у вас есть, действительно имеют смысл! Возможно, он был искажен из-за расхождений в кодировке ранее.

Как только данные обретут смысл в базе данных, все будет готово!

ЕСЛИ вам это не подходит, вам придется прочитать и полностью понять эту статью. . Только тогда вы сможете определить, в чем проблема, и синхронизировать свои кодировки. (Очевидно, что ваши исходные файлы PHP также должны быть в кодировке UTF-8...)

person Ilie Pandia    schedule 01.02.2014
comment
Вау, спасибо, Илли за такой поясняющий ответ, я обязательно посмотрю - person Ashutosh; 01.02.2014
comment
Отличное объяснение. - person Sunny R Gupta; 04.03.2014