2012-05-23 9 views
3

Моя таблица выглядит this-PHP MySQL специальный символ

province_id int(11)     
province_title char(200) utf8_general_ci 
parent int(8) int(2) 

Я вставил много данных непосредственно от PhpMyAdmin (не из PHP страницы). но когда я получаю эти данные и показываю их на php-странице, возникают проблемы со специальными символами.

как-

Québec shows - Qu�bec. 

мой HTML заголовок выглядит -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

я думаю, что проблема, возможно, произошло при вставке данных. как я могу преобразовать эти данные в phpmyadmin? любая помощь?

+0

Вы действительно хотите использовать символ (200)? СУБД будет использовать очень много отступов и дискового пространства. Почему бы не использовать varchar вместо этого? Кроме того, если вы переходите на varchar, и если вы собираетесь искать в родительском столбце (например, при поиске детей), вы можете захотеть поместить это перед varchar, поскольку столбцы с фиксированной шириной, такие как ints, обычно должны идти первыми (делает поиск быстрее). – megaflop

ответ

4

кажется, что вы не используете UTF-8 везде так что ваши данные получили перепутались в какой-то момент. в зависимости от того, что именно вы делаете, вы должны изменить/добавить один или несколько из следующих пунктов (скорее всего, это SET CHARSET/mysql_set_charset которым вы забыли):

  • сказать MySQL использовать UTF- 8. для этого добавьте это в свой.CNF:

    collation_server = utf8_unicode_ci 
    character_set_server = utf8 
    
  • до взаимодействия с MySQL, отправить эти два querys:

    SET NAMES 'utf8'; 
    CHARSET 'utf8'; 
    

    или, в качестве альтернативы, пусть PHP сделать это после открытия соединения:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions 
    mysqli::set_charset('utf8') // when using mysqli 
    
  • набор UTF-8 в качестве кодировки по умолчанию для базы данных

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8'; 
    
  • сделать то же самое для таблиц:

    CREATE TABLE `my_table` (
        -- ... 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    
  • предполагая клиента является браузером, обслуживает ваш контент как utf-8 и t он правильный заголовок:

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

    быть действительно уверены, что браузер понимает, добавить мета-тег:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    
  • и, наконец, но не в последнюю очередь, сказать браузер подает формы с использованием utf-8

    <form accept-charset="utf-8" ...> 
    
+1

+1 для получения полного ответа. Поскольку использование MySQL не рекомендуется, я предлагаю вам добавить «или использовать mysqli :: set_charset». – megaflop

+0

спасибо за подсказку, я добавил это. – oezi

0

Сервер MySQL не настроен на то, чтобы по умолчанию кодировать UTF-8 от клиента.

Таким образом, вы должны открыть соединение с помощью

mysql_query("SET NAMES utf8"); 

Если вы используете PDO,

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
); 

$dbh = new PDO($dsn, $username, $password, $options); 
0

Если это выглядит нормально, когда вы видите, данные в PHPMyAdmin проблема может быть с текстом enconding самого файла.

Используйте Eclipse (Edit »Set Encoding) или Notepad ++ (Encoding), чтобы подтвердить, что у вас есть правильная кодировка в файле.

Смежные вопросы