За съжаление, phpMyAdmin е едно от първите php приложения, които говорят с MySQL за набор от знаци правилно. Проблемът ви най-вероятно се дължи на факта, че базата данни не съхранява правилните низове UTF-8 на първо място.
За да се показват правилно символите в phpMyAdmin, данните трябва да се съхраняват правилно в базата данни. Въпреки това, преобразуването на базата данни в правилен набор от знаци често нарушава уеб приложения, които не са запознати с функцията, свързана с набор от знаци, предоставена от MySQL.
Мога ли да попитам:MySQL> версия 4.1? За какво уеб приложение е базата данни? phpBB? Базата данни беше мигрирана от по-стара версия на уеб приложението или от по-стара версия на MySQL?
Моето предложение е да не брат, ако уеб приложението, което използвате, е твърде старо и не се поддържа. Преобразувайте базата данни в истински UTF-8 само ако сте сигурни, че уеб приложението може да ги прочете правилно.
Редактиране:
Вашият MySQL е> 4.1, което означава, че знае набор от знаци. Какви са настройките за сортиране на набор от знаци за вашата база данни? Почти съм сигурен, че използвате latin1
, което е MySQL име за ASCII, за съхраняване на UTF-8 текст в „байтове“ в базата данни.
За клиенти, които не са чувствителни към знаци (т.е. mysql-cli и php-mod-mysql), символите се показват правилно, тъй като се прехвърлят към/от базата данни като байтове. В phpMyAdmin байтовете се четат и показват като ASCII символи, това е текстът за боклук, който изглежда.
Бяха прекарани безброй часове преди години (2005?), когато MySQL 4.0 стана остарял в много части на Азия. Има стандартен начин да се справите с проблема си и погълнатите данни:
- Архивирайте вашата база данни като
.sql
- Отворете го в текстов редактор с възможност за UTF-8, уверете се, че изглеждат правилно.
- Потърсете
charset collation latin1_general_ci
, заменетеlatin1
къмutf8
. - Запазете като нов sql файл, не презаписвайте резервното си копие
- Импортирайте новия файл, те вече ще изглеждат правилно в phpMyAdmin, а японският във вашето уеб приложение ще стане въпросителни. Това е нормално.
- За вашето php уеб приложение, което разчита на php-mod-mysql, вмъкнете
mysql_query("SET NAMES UTF8");
следmysql_connect()
, сега въпросите ще изчезнат. -
Добавете следната конфигурация
my.ini
за mysql-cli:# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
За повече информация относно набора от знаци в MySQL, моля, вижте ръководството: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Имайте предвид, че предполагам, че вашето уеб приложение използва php-mod-mysql за свързване към базата данни (оттук mysql_connect()
функция), тъй като php-mod-mysql е единственото разширение, за което се сещам, което все още предизвиква проблема И ДЕН ДЕН.
phpMyAdmin използва php-mod-mysqli за свързване с MySQL. Никога не се научих как да го използвам, защото преминах към рамки*, за да разработя моите php проекти. Силно ви насърчавам да направите това.
- Много рамки, напр. CodeIgniter, Zend, използвайте mysqli или pdo за свързване към бази данни. Функциите на mod-mysql се считат за остарели причина за проблеми с производителността и мащабируемостта. Освен това не искате да обвързвате проекта си с конкретен тип база данни.