Home >Backend Development >PHP Tutorial >PHP MYSQL Chinese garbled problem, _PHP tutorial

PHP MYSQL Chinese garbled problem, _PHP tutorial

WBOY
WBOYOriginal
2016-07-13 09:47:53862browse

PHP MYSQL Chinese garbled problem,

Multi-language support has been introduced since MySQL 4.1, but Chinese inserted with PHP will appear garbled. No matter what encoding is used, it will not work.

Solving this problem is actually very simple.

1. When creating the table, set the encoding type to gb2312_chinese_ci.

2. Add a line of mysql_query("SET NAMES 'gb2312'",$link); to the database connection statement on the PHP page; for example

$db_host="localhost"; 
$db_user="root"; 
$db_password="password"; 
$db_name="test";

$link=mysql_connect($db_host,$db_user,$db_password);
mysql_query("SET NAMES 'gb2312'",$link); 
$db=mysql_select_db($db_name,$link); 
$query="select * from user"; 
$result=mysql_query($query);

Add this line to both the writing page and the reading page. In this way, Chinese characters in MYSQL can be displayed normally.

Related information:

Multi-language support has been introduced since MySQL 4.1, and some features have surpassed other database systems.
MySQL4.1's character set support (Character Set Support) has two aspects: character set (Characterset) and sorting method (Collation). Support for character sets is refined to four levels: server, database, table and connection.
To view the system's character set and sorting settings, you can use the following two commands: !

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

The values ​​listed above are the system default values. (It’s strange why the system defaults to latin1 Swedish sorting method)...
When we access the MySQL database through PHP in the original way, even if we set the default character set of the table to utf8 and send the query through UTF-8 encoding, you will find that the data stored in the database is still garbled. The problem lies in this connection layer. The solution is to execute the following sentence before sending the query:
set names 'utf8';
It is equivalent to the following four instructions:

Copy code The code is as follows:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
set collation_connection = utf8_general_ci

Since the query submitted by the default web page is gb2312 (which can be seen in the form page meta), and mysql treats it as utf8 by default (you can check the character_set_client=utf8 at this time), it must be garbled. In the same way, the results returned by mysql have been converted into character_set_results encoding (it has nothing to do with the encoding of the table). The default is utf8, and the web page treats it as gb2312, so there must be garbled fields such as titles and other fields read from the database. The text in other PHP parts is not garbled.

Solved (by Yijian Piaoxue):
When installing mysql5.0, select the utf8 character set (when creating databases and fields with phpmyadmin, you do not need to select the utf8 character set in the arrangement), and send

after php establishes the connection.

Copy code The code is as follows:
$link = mysql_connect('localhost', 'root', 'root');
mysql_query("SET NAMES 'utf8'",$link);

At this time, what we see on the webpage is still garbled but it is no longer ????. When we check the source file of the webpage, it is completely normal. Open the php source file with notepad, don't save it as utf8 encoding, refresh the web page, and everything is done.
Or, of course, you still need to install utf8 during installation, send set names 'gb2312' in php, and save the php file as notepad's default ansi, which can also display Chinese correctly.

But you can’t send SET NAMES 'utf8' every time you connect. I haven’t found a way to completely solve it.

When installing mysql in this way, the default character set is selected as utf8, which brings another problem. After we enter the mysql console in command.exe, the query results become garbled. We can enter

before querying.

Copy code The code is as follows:
mysql>set names 'gbk';

or

Copy code The code is as follows:
mysql>set names 'gb2312';

It is equivalent to telling the mysql client to use the gb2312 character set, and the result will be correct. gb2312 is a subset of GBK.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1024928.htmlTechArticlePHP MYSQL Chinese garbled problem, multi-language support has been introduced since MySQL 4.1, but Chinese inserted with PHP will appear Garbled code. No matter what encoding is used, it will not work. The solution to this problem is actually very simple...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn