Как вставить значение на иврите в базу данных mysql на php
Я пытаюсь вставить значение на иврите в свою базу данных mysql, вместо иврита значения выглядят так.
ש×"גש×"כעש×"
Параметры сортировки таблицы по умолчанию - latin1_swedish_ci, я также попытался изменить их на utf-8_general_ci, hebrew_bin, hebrew_general_ci, но результат все тот же.
В своем коде я, конечно, использую мета-тег для настройки кодировки:
<meta charset="UTF-8">
И перед моим php-запросом я добавил это строка:
mysql_query("SET NAMES utf8");
Я просматриваю результат в phpmyadmin.
8 answers
Проверьте сопоставление_соединения:
show variables like '%collation%'
Я решил свою проблему с ивритом. Это была проблема с кодировкой строк/полей базы данных и таблицы. Вот решение, которое я использовал. Я воспользовался помощью другого ответа, и ссылка приведена ниже, на случай, если она кому-нибудь понадобится.
- параметры сортировки бд должны быть
utf8_general_ci
. - сопоставление таблицы с ивритом должно быть
utf8_general_ci
- в моем скрипте подключения php я поставил
header('Content-Type: text/html; charset=utf-8');
- в моем теге xhtml head я поставил
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- после выбора базы данных в сценарии подключения я положить
mysql_query("SET NAMES 'utf8'");
И тогда проблема была решена.
Установите кодировку для достижения решения
При создании базы данных
CREATE DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;
Или если база данных уже создана
CREATE TABLE table_name(
...
)
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
ИЛИ во время написания запроса
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);
$re = mysql_query('SHOW VARIABLES LIKE "%character_set%";')or die(mysql_error());
while ($r = mysql_fetch_assoc($re)) {var_dump ($r); echo "<br />";}
Вы должны убедиться, что:
- вы установили utf-8 в php
- вы используете utf-8 в соединении
- ваша таблица определена как utf-8_general_ci
- конкретное поле определяется как utf-8_general_ci
Тогда вы должны иметь возможность правильно просматривать иврит или любой другой язык в phpadmin
Я бы сказал, что для того, чтобы убедиться, что значения правильно передаются в базу данных, я бы добавил сообщение о штампе перед вставкой в базу данных и распечатал значение, например:
die($_POST['thevalue']);
//insert to database.
//...
Если все пойдет хорошо, то проблема на стороне базы данных, в базе данных я бы попробовал использовать эти параметры сортировки
|иврит | ISO 8859-8 Иврит | еврейский_генерал_ци| 1|
Согласно http://dev.mysql.com/doc/refman/5.0/en/charset-mysql.html предложите.
Но если это не удастся на стороне php, причина может быть в том, что сервер не поддерживает иврит, убедитесь, что в выходном документе html вы используете правильный метатег с
...
<meta charset="ISO 8859-8">
...
Дайте нам знать, как это будет происходить, удачи:)
Я согласен с параметром установить его как utf-8, однако, если по какой-то причине вы не можете, вы всегда можете преобразовать его в base64. Не самый лучший (по большому счету), но мог бы помочь кому-то выбраться из ямы.
Для дальнейшего использования, если у вас есть эта проблема, и вы используете PDO, а не mysqli, вам нужно будет сделать это следующим образом:
- База данных ( все параметры сортировки ) должна быть utf8_general_ci.
- Установите параметры сортировки таблицы с ивритом также на utf8_general_ci.
- В теге HTML "head" добавьте следующее:
- В вашем файле подключения PHP добавьте после запроса на подключение в этой строке: conn->exec ("имена наборов utf8");
- если вы используете классы, то у вас, вероятно, будет "conn" в качестве переменной. в этом случае вам придется использовать его следующим образом: $this->conn->exec ("имена наборов utf8");
Надеюсь, это поможет будущим людям, у которых есть эта проблема и которые используют PDO. Желаю удачи.
Что, наконец, помогло мне, так это добавить кодировку в соединение:
{"mysql:host=$host;dbname=$db;charset=utf8"}