MySQL хранит общие специальные символы, но не редкие - PullRequest
2 голосов
/ 23 декабря 2011

Когда я пытаюсь вставить некоторые редкие специальные символы (∨ ∧ → ↔ ∴), они сохраняются в виде вопросительных знаков.Но когда я пытаюсь вставить несколько более распространенных специальных символов (© ® ¬), все идет хорошо.

Я установил каждую переменную, базу данных, таблицу и соединение, которые смог найти, в UTF-8, но не повезлоеще.Что мне не хватает?Заранее спасибо!

Вот минимальный пример:

<?php
header('content-type:text/html; charset=utf-8;');

$connection = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $connection);
mysql_set_charset('utf8', $connection);
mysql_query('SET NAMES UTF8');

$special_character = '∴';

echo 'Encoding of the special character before insert: '.base64_encode($special_character).'<br />';

mysql_query('INSERT INTO table (column) VALUES ("'.$special_character.'")');

$query = mysql_query('SELECT column FROM table');
while ($ROW = mysql_fetch_assoc($query))
    {
    echo 'Encoding of the special character after retrieval: '.base64_encode($ROW['column']).'<br />';
    echo 'Output: '.$ROW['column'].'<br />';
    }

mysql_close($connection);
?>

Вывод этого скрипта:

Кодировка специального символа перед вставкой: 4oi0

Кодировка специального символа после извлечения: Pw ==

Вывод:?

Может быть, потому что у меня есть стандартная установка MySQL для Mac OSX, котораянет файла my.cnf?Может быть, значения по умолчанию, которые идут с этой установкой, не являются UTF-8?Кто-нибудь знает?

ОБНОВЛЕНИЕ: Я определил, что проблема в моей локальной установке MySQL, потому что она не появляется, когда я запускаю код на своем веб-хосте.Я все еще хочу решить это, хотя.

Ответы [ 4 ]

0 голосов
/ 24 декабря 2011

Кажется, проблема была в моей локальной установке MySQL.Я использовал устаревшую версию, поставляемую в комплекте с моим Mac OSX 10.5.Я скачал и установил более новую версию MySQL, и проблема решена.

И поэтому, мальчики и девочки, всегда полезно иметь самую последнюю версию программного обеспечения, которое вы используете.

0 голосов
/ 23 декабря 2011

То, что вы храните в базе данных, должно содержаться в таблице символов, которую вы используете. например для UTF-8: http://www.utf8 -chartable.de /

0 голосов
/ 23 декабря 2011

Вы пропустили один.Ваше подключение к mysql также должно быть установлено в UTF8.После первоначального подключения к mysql ваш первый «запрос» должен быть «SET NAMES UTF8».Если вы используете терминальную программу, запустите этот «запрос» также.

0 голосов
/ 23 декабря 2011

В прошлом у меня была похожая проблема в Java-консоли eclipse.Информация в базе данных в моем случае хранилась правильно.Случилось так, что консоль не предназначена для отображения этих символов.

Чтобы увидеть их, мое приложение сгенерировало файл со специальными символами в них и открыло их в notepad ++, с помощью которого можно изменить набор символов наприменить к файлу.У меня была эта проблема с русскими символами.

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