UTF-8 MySQL и Charset - PullRequest
       7

UTF-8 MySQL и Charset

6 голосов
/ 31 мая 2010

Может кто-нибудь объяснить мне, когда я установил все на UTF-8, я продолжаю получать эти проклятые

MySQL
Версия сервера: 5.1.44
MySQL charset: UTF-8 Unicode (utf8)

Я создаю новую базу данных

name: utf8test
сопоставление: utf8_general_ci
Сортировка соединений MySQL: utf8_general_ci

Мой SQL выглядит так:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `test_table` (
    `test_id` int(11) NOT NULL,
    `test_text` text NOT NULL,
    PRIMARY KEY (`test_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `test_table` (`test_id`, `test_text`) VALUES
(1, 'hééélo'),
(2, 'wööörld');

Мой PHP / HTML:

<?php
$db_conn = mysql_connect("localhost", "root", "") or die("Can't connect to db");
mysql_select_db("utf8test", $db_conn)  or die("Can't select db");

// $result = mysql_query("set names 'utf8'"); // this works... why??
$query = "SELECT * FROM test_table";        
$result = mysql_query($query);

$output = "";
while($row = mysql_fetch_assoc($result)) {
    $output .= "id: " . $row['test_id'] . " - text: " . $row['test_text'] . "<br />";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="it" xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UTF-8 test</title>
</head>
<body>
<?php echo $output; ?>
</body>
</html>

Ответы [ 6 ]

6 голосов
/ 31 мая 2010

Попробуйте установить кодировку символа после функции mysql_connect следующим образом:

 mysql_query ("set character_set_client='utf8'"); 
 mysql_query ("set character_set_results='utf8'"); 

 mysql_query ("set collation_connection='utf8_general_ci'");
1 голос
/ 31 мая 2010

Я бы сказал, что вы забыли установить кодировку типа содержимого вашего PHP-файла в utf-8:

header('Content-Type: text/html; charset=utf-8');

Или это ошибка кодирования в базе данных MySQL?

Если только загрузка данных возвращает неправильные результаты, вы можете использовать запросы, упомянутые ранее, или эту строку кода, чтобы включить UTF-8 для запросов:

$mysqli->set_charset('utf8');

Надеюсь, это то, что вам нужно.

1 голос
/ 31 мая 2010

Я установил все на UTF-8

Не совсем.
Вы должны сообщить mysql кодировку вашего клиента .

На самом деле вам не нужно настраивать «все» в utf-8. Вы можете иметь свои таблицы в latin1 и выводить в utf-8. Или наоборот.
Очень гибкий

Но вы должны явно настроить кодировку клиента. Вот почему он работает с set names utf8. Потому что этот запрос настраивает кодировку клиента. И пусть Mysql знает, что данные должны быть отправлены в utf-8. Довольно разумно, да?

Также я должен упомянуть ваш дамп SQL. Нужна такая же настройка. Просто установите имена где-то наверху. Потому что вы отправляете эти запросы и с какого-то клиента. И кодировка этого клиента также должна быть настроена.

И еще одна вещь, которую стоит упомянуть: убедитесь, что ваш сервер отправляет правильную кодировку в заголовке типа контента. Вы также не установили UTF-8.

1 голос
/ 31 мая 2010

Я не увидел запрос "SET NAMES 'utf8';" сразу после подключения к вашей базе данных.

Попробуйте, может работать для вас.

0 голосов
/ 31 мая 2010

Вы хотите проверить текущий набор символов, используя mysql_client_encoding и при необходимости mysql_set_charset. Или просто не обращайте внимания на проверку и слепо переходите к настройке.

0 голосов
/ 31 мая 2010

взгляните на функцию mysql_set_charset . Возможно, вам нужно позвонить, прежде чем вы получите данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...