хранение китайских иероглифов в MySQL не работает - PullRequest
1 голос
/ 31 декабря 2011

Я пытаюсь сохранить китайский иероглиф в базе данных mysql, но в нем хранится какой-то грязный символ.Пожалуйста, помогите .. вот мой код-

<?php header("Content-Type: text/html; charset=UTF-8");
if(isset($_POST['submit']))
{
$conn=mysql_connect("localhost","root","") or die("CONNECTION FAILED"); 
 $db=mysql_select_db("mytest",$conn) or die("DATABASE DOES NOT EXISTS");
 mysql_query("SET character_set_client=utf8", $conn);
  mysql_query("SET character_set_connection=utf8", $conn);
mysql_query("INSERT INTO tbl_test(id,name)
VALUES (null, '".$_POST['fname']."')") or die(mysql_error());
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="" method="post">
Name: <input type="text" name="fname" />
<input type="submit" name="submit" />
</form> 
</body>
</html>

1 Ответ

1 голос
/ 31 декабря 2011

добро пожаловать в Charset Hell.

В PHP, чтобы использовать определенный набор символов, абсолютно все должно быть в одном наборе символов.Если вы собираетесь использовать UTF8, то все должно быть UTF8.База данных должна использовать UTF8 в качестве своей кодировки, соединение между сценарием и базой данных должно быть UTF8 (похоже, вы уже позаботились об этом), сам скрипт PHP должен быть сохранен как файл UTF8 (без спецификации, потому что наличие спецификации только потом вызовет больше проблем), а браузер должен просматривать страницу, сгенерированную сценарием в UTF8 (вы должны использовать команду header () для отправки заголовка типа содержимого, который указываетэтот).

Если какая-либо ссылка в цепочке не является UTF8, вы в конечном итоге получите нежелательные сообщения для определенных последовательностей символов, которые действительны в одной кодировке символов, но не в другой.Хотя PHP имеет функции для преобразования между кодировками, он быстро запутывается и его лучше избегать.

...