본문 바로가기

Programing

phpMyAdmin에서 UTF-8 문자를 표시하는 방법은 무엇입니까?

반응형

phpMyAdmin에서 UTF-8 문자를 표시하는 방법은 무엇입니까?


데이터베이스를 UTF-8로 올바르게 설정하고 일본어 문자가 포함 된 데이터베이스를 처리하고 있습니다. mysql 명령 줄에서 SELECT * ...를 수행하면 일본어 문자가 제대로 표시됩니다. 데이터베이스에서 데이터를 꺼내 웹 페이지에 표시 할 때 제대로 표시됩니다.

그러나 phpMyAdmin에서 테이블 데이터를 볼 때 가비지 텍스트 만 표시됩니다. 즉.

ç§ã¯æ— ¥ æœ¬æ– ™ ç † ãŒå ¥ ½ãã§ã ™ ã € ‚æ— ¥ æœ¬æ– ™ ç † ã ‚...

phpMyAdmin에서 일본어로 문자를 표시하려면 어떻게해야합니까?

HTML 페이지의 문자 인코딩은 UTF-8로 설정됩니다.

편집하다:

내 데이터베이스 내보내기를 시도하고 geany에서 .sql 파일을 열었습니다. 인코딩이 UTF-8로 설정되어 있어도 문자가 여전히 왜곡됩니다. (그러나 데이터베이스의 mysqldump를 수행하면 문자가 깨져 보입니다).

문자 집합이 데이터베이스 및 모든 테이블에 대해 올바르게 설정되었습니다 ( 'latin'은 파일의 어느 곳에서도 찾을 수 없음)

CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

my.cnf에 줄을 추가하고 mysql을 다시 시작했지만 변경 사항이 없습니다. Zend Framework를 사용하여 데이터베이스에 데이터를 삽입하고 있습니다.

나는 이것을 정말로 이해하고 싶기 때문에이 질문에 대한 현상금을 열 것입니다.


불행히도 phpMyAdmin은 MySQL에 문자셋에 대해 올바르게 통신하는 최초의 PHP 애플리케이션 중 하나입니다. 문제는 데이터베이스가 처음에 올바른 UTF-8 문자열을 저장하지 않기 때문일 가능성이 큽니다.

phpMyAdmin에서 문자를 올바르게 표시하려면 데이터가 데이터베이스에 올바르게 저장되어야합니다. 그러나 데이터베이스를 올바른 문자 집합으로 변환하면 MySQL에서 제공하는 문자 집합 관련 기능을 인식하지 못하는 웹 앱이 종종 중단됩니다.

MySQL> 버전 4.1입니까? 데이터베이스는 어떤 웹 앱입니까? phpBB? 데이터베이스가 이전 버전의 웹 앱에서 마이그레이션 되었습니까, 아니면 이전 버전의 MySQL에서 마이그레이션 되었습니까?

사용하는 웹 앱이 너무 오래되어 지원되지 않는 경우 형제에게 제안하지 않습니다. 웹 앱이 올바르게 읽을 수 있다고 확신하는 경우에만 데이터베이스를 실제 UTF-8로 변환하십시오.


편집하다:

MySQL이 4.1보다 크면 문자 집합을 인식한다는 의미입니다. 데이터베이스의 문자 집합 데이터 정렬 설정은 무엇입니까? latin1ASCII의 MySQL 이름 인을 사용하여 UTF-8 텍스트를 '바이트'로 데이터베이스에 저장하고 있다고 확신 합니다.

문자셋에 민감하지 않은 클라이언트 (예 : mysql-cli 및 php-mod-mysql)의 경우 문자는 데이터베이스로 /에서 바이트로 전송되기 때문에 올바르게 표시됩니다. phpMyAdmin에서 바이트는 읽혀지고 ASCII 문자로 표시됩니다.

아시아의 많은 지역에서 MySQL 4.0이 쓸모 없게 된 몇 년 전 (2005 년?)에 수많은 시간이 소요되었습니다. 문제와 데이터를 처리하는 표준 방법이 있습니다.

  1. 데이터베이스를 다음과 같이 백업하십시오. .sql
  2. UTF-8 가능 텍스트 편집기에서 열어서 올바른지 확인하십시오.
  3. 를 찾아 charset collation latin1_general_ci교체 latin1utf8.
  4. 새 SQL 파일로 저장하고 백업을 덮어 쓰지 마십시오.
  5. 새 파일을 가져 오면 phpMyAdmin에서 올바르게 표시되고 웹 앱의 일본어가 물음표가됩니다. 그것은 정상입니다.
  6. php-mod-mysql에 의존하는 PHP 웹 앱의 경우 mysql_query("SET NAMES UTF8");뒤에 삽입 mysql_connect()하면 물음표가 사라집니다.
  7. my.inimysql-cli에 대해 다음 구성 추가합니다 .

    # CLIENT SECTION
    [mysql]
    default-character-set=utf8
    # SERVER SECTION
    [mysqld]
    default-character-set=utf8
    

MySQL의 charset에 대한 자세한 내용은 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 함수는 성능 및 확장 성 문제를 일으키는 오래된 것으로 간주됩니다. 또한 프로젝트를 특정 유형의 데이터베이스에 연결하지 않으려 고합니다.

PDO를 사용하는 경우 UTF8로 시작하는 것을 잊지 마십시오.

 $con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass,  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

(이것을 알아 내기 위해 5 시간을 보냈습니다. 소중한 시간을 절약 할 수 있기를 바랍니다 ...)


좀 더 인터넷 검색을했고, 우연히 페이지

명령이 의미가없는 것 같지만 어쨌든 시도했습니다.

/usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php 파일에서 내가 추가 PMA_DBI_connect()return명령문 바로 앞 의 함수 끝에 있습니다 .

mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");

그리고 작동합니다! 이제 phpMyAdmin에 일본어 문자가 표시됩니다. WTF? 왜 이것이 작동합니까?


나도 같은 문제가 있었는데

phpMyAdmin의 모든 텍스트 / varchar 데이터 정렬을 utf-8로 설정하고 php 파일에서 다음을 추가합니다.

mysql_set_charset ( "utf8", $ your_connection_name);

이것은 나를 위해 그것을 해결했습니다.


이에 대한 해결책은 다음과 같이 쉽습니다.

  1. phpmysqladmin 연결 기능 / 방법 찾기
  2. 데이터베이스 연결 후 추가 $db_conect->set_charset('utf8');

phpmyadmin은 phpmyadmin 구성 파일에 적절한 데이터 정렬을 정의하기 때문에 MySQL 연결을 따르지 않습니다.

따라서 원하지 않거나 서버 매개 변수에 액세스 할 수없는 경우 클라이언트와 호환되는 다른 형식 (인코딩) (예 : phpmyadmin)으로 결과를 전송하도록 강제해야합니다.

예를 들어 MySQL 연결 데이터 정렬과 MySQL 문자 집합이 모두 utf8이지만 phpmyadmin이 ISO 인 경우 phpmyadmin을 통해 MYSQL로 전송되는 선택 쿼리 앞에이 항목을 추가해야합니다.

SET SESSION CHARACTER_SET_RESULTS =latin1;

다음은 latin1에서 utf8로 느슨 함없이 데이터를 복원하는 방법입니다.

/**
     * Fixes the data in the database that was inserted into latin1 table using utf8 encoding.
     *
     * DO NOT execute "SET NAMES UTF8" after mysql_connect.
     * Your encoding should be the same as when you firstly inserted the data.
     * In my case I inserted all my utf8 data into LATIN1 tables.
     * The data in tables was like ДЕТСКИÐ.
     * But my page presented the data correctly, without "SET NAMES UTF8" query.
     * But phpmyadmin did not present it correctly.
     * So this is hack how to convert your data to the correct UTF8 format.
     * Execute this code just ONCE!
     * Don't forget to make backup first!
     */
    public function fixIncorrectUtf8DataInsertedByLatinEncoding() {
        // mysql_query("SET NAMES LATIN1") or die(mysql_error()); #uncomment this if you already set UTF8 names somewhere

        // get all tables in the database
        $tables = array();
        $query = mysql_query("SHOW TABLES");
        while ($t = mysql_fetch_row($query)) {
            $tables[] = $t[0];
        }
        // you need to set explicit tables if not all tables in your database are latin1 charset
        // $tables = array('mytable1', 'mytable2', 'mytable3'); # uncomment this if you want to set explicit tables

        // duplicate tables, and copy all data from the original tables to the new tables with correct encoding
        // the hack is that data retrieved in correct format using latin1 names and inserted again utf8
        foreach ($tables as $table)  {
            $temptable = $table . '_temp';
            mysql_query("CREATE TABLE $temptable LIKE $table") or die(mysql_error());
            mysql_query("ALTER TABLE $temptable CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error());
            $query = mysql_query("SELECT * FROM `$table`") or die(mysql_error());
            mysql_query("SET NAMES UTF8") or die(mysql_error());
            while ($row = mysql_fetch_row($query)) {
                $values = implode("', '", $row);
                mysql_query("INSERT INTO `$temptable` VALUES('$values')") or die(mysql_error());
            }
            mysql_query("SET NAMES LATIN1") or die(mysql_error());
        }

        // drop old tables and rename temporary tables
        // this actually should work, but it not, then
        // comment out this lines if this would not work for you and try to rename tables manually with phpmyadmin
        foreach ($tables as $table)  {
            $temptable = $table . '_temp';
            mysql_query("DROP TABLE `$table`") or die(mysql_error());
            mysql_query("ALTER TABLE `$temptable` RENAME `$table`") or die(mysql_error());
        }
        // now you data should be correct

        // change the database character set
        mysql_query("ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error());

        // now you can use "SET NAMES UTF8" in your project and mysql will use corrected data
    }

변화 latin1_swedish_ciutf8_general_ci의 phpmyadmin-> table_name-> FIELD_NAME

화면에서 찾을 수있는 위치입니다.


첫째, 클라이언트에서

mysql> SHOW VARIABLES LIKE 'character_set%';

이것은 당신에게 다음과 같은 것을 줄 것입니다.

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     | 
| character_set_connection | latin1                     | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | latin1                     | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

클라이언트, 연결, 데이터베이스에 대한 일반 설정을 검사 할 수있는 곳

그런 다음 데이터를 검색하는 열도 검사해야합니다.

SHOW CREATE TABLE TableName

및 CHAR 필드의 문자 집합 및 데이터 정렬을 검사합니다 (일반적으로 사람들이 명시 적으로 설정하지는 않지만을 제공 할 수 CHAR[(length)] [CHARACTER SET charset_name] [COLLATE collation_name]있음 CREATE TABLE foo ADD COLUMN foo CHAR ...).

나는 mysql의 측면에 모든 관련 설정을 나열했다고 생각합니다 . 여전히 잃어버린 경우 훌륭한 문서 와 아마도이 질문읽으십시오 (특히 처음에 mysql 클라이언트 만 보면서 올바르게 얻었음에도 불구하고).


1- 파일 열기 :

C:\wamp\bin\mysql\mysql5.5.24\my.ini

2- Look for [mysqld] entry and append:

character-set-server = utf8
skip-character-set-client-handshake

The whole view should look like:

[mysqld]
  port=3306
  character-set-server = utf8
  skip-character-set-client-handshake

3- Restart MySQL service!


Its realy simple to add multilanguage in myphpadmin if you got garbdata showing in myphpadmin, just go to myphpadmin click your database go to operations tab in operation tab page see collation section set it to utf8_general_ci, after that all your garbdata will show correctly. a simple and easy trick


The function and file names don't match those in newer versions of phpMyAdmin. Here is how to fix in the newer PHPMyAdmins:

  1. Find file: phpmyadmin/libraries/DatabaseInterface.php

  2. In function: public function query

  3. Right after the opening { add this:

    if($link != null){
        mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
        mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    }
    

That's it. Works like a charm.


I had exactly the same problem. Database charset is utf-8 and collation is utf8_unicode_ci. I was able to see Unicode text in my webapp but the phpMyAdmin and sqldump results were garbled.

It turned out that the problem was in the way my web application was connecting to MySQL. I was missing the encoding flag.

After I fixed it, I was able to see Greek characters correctly in both phpMyAdmin and sqldump but lost all my previous entries.


just uncomment this lines in libraries/database_interface.lib.php

if (! empty($GLOBALS['collation_connection'])) {
       // PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE);
       //PMA_DBI_query("SET collation_connection = '" .
       //PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link, PMA_DBI_QUERY_STORE);
} else {
       //PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE);
 }

if you store data in utf8 without storing charset you do not need phpmyadmin to re-convert again the connection. This will work.


Easier solution for wamp is: go to phpMyAdmin, click localhost, select latin1_bin for Server connection collation, then start to create database and table


Add:

mysql_query("SET NAMES UTF8");

below:

mysql_select_db(/*your_database_name*/);

It works for me,

mysqli_query($con, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

ALTER TABLE table_name CONVERT to CHARACTER SET utf8;

*IMPORTANT: Back-up first, execute after

ReferenceURL : https://stackoverflow.com/questions/4777900/how-to-display-utf-8-characters-in-phpmyadmin

반응형