Home  >  Article  >  php教程  >  PHP-MYSQL Chinese garbled problem.

PHP-MYSQL Chinese garbled problem.

WBOY
WBOYOriginal
2016-07-09 09:09:51855browse

Multi-language support has been introduced since MySQL 4.1, but Chinese characters inserted using 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 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, the Chinese 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.
MySQL 4.1's character set support (Character Set Support) has two aspects: character set (Character Set Support) set) 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 how the system defaults to the Swedish sorting method of latin1)...
When we access the MySQL database through PHP in the original way, even if the default character set of the table is set to utf8 and encoded through UTF-8 Send a query and 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:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
set collation_connection = utf8_general_ci
by The query submitted on the default web page is gb2312 (can be seen in the form page meta), and mysql treats it as utf8 by default (you can check the character_set_client=utf8), so it must be garbled. In the same way, the result returned by mysql has been converted into Character_set_results is encoded (regardless of the encoding of the table). It also defaults to utf8, and the web page treats it as gb2312, so there must be titles and other data generated by the data. The field read by the library is garbled, but other PHP text is not garbled.

Solution (by Yi Jian Piaoxue):
When installing mysql5.0, you need to select the utf8 character set (you don’t need to select the utf8 character set when creating databases and fields with phpmyadmin), and After php establishes the connection, send
$link = mysql_connect('localhost', 'root', 'root');
mysql_query("SET NAMES 'utf8'",$link);
At this time we What I see on the web page is still garbled, but it is no longer ????. When I check the source file of the web page, 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 when installing. Send set names 'gb2312' in php, and save the php file as Notepad's default ansi, which can also display Chinese correctly.

But always 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 again. We can enter mysql>set names 'gbk';
or
mysql>set names 'gb2312';
is equivalent to telling the mysql client to use the gb2312 character set, and the result is correct. gb2312 is a sub-child of GBK Set.
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