We often use the"Set names utf8", Why is this sentence added?CodeCan this be solved? Next, let's dive into the internal execution principle of set names utf8.
Let's talk about the character set of MySQL. In Windows, you can modify
PHP code
[MySQL]
Default-character-set = utf8 // default Character Set of the Client
[Mysqld]
Default-character-set = utf8 // default character set on the server
Suppose we set both to utf8, and then input "show variebles like" character_set _ % ";" in the MySQL command line client. The following characters are displayed:
Character_set_client Latin1
Character_set_connection Latin1
Character_set_database utf8
Character_set_results Latin1
Character_set_server utf8
Character_set_system utf8
If we use PHP with UTF-8ProgramReading data from the database may be a string of "???" Or other garbled characters.
The solution is to execute a query "set names utf8" Before connecting to the database and reading data, that is
Mysql_query ("set names utf8 ");
// This sentence must be placed after the database server connection statement [$ connection = mysql_connect ($ db_host, $ db_user, $ db_psw) or die ("connection server failed ");]
It can be displayed normally (as long as the characters in the database information are normal ).
Enter "set names utf8;" in the MySQL command line, and then execute "show variebles like" character_set _ % ";", the original Latin1 variables "character_set_client", "character_set_connection", and "character_set_results" are all changed to utf8.
Refer to the Manual. The above sentence is equal:
SetCharacter_set_client=Utf8;
SetCharacter_set_results=Utf8;
SetCharacter_set_connection=Utf8;
Let's take a look at the functions of the three variables:
Information Input path:Client → connection → Server;
Information output path:Server → connection → results.
In other words, each path must undergo three character set encoding changes. Taking garbled output as an example, for utf8 data in the server, the incoming connection is converted to Latin1, the incoming results is converted to Latin1, And the UTF-8 page is converted to results. If the two character sets are incompatible, such as Latin1 and utf8, the conversion process is irreversible and destructive.
However, we need to declare that "Set names utf8" is only temporary, and the default value will be restored after MySQL is restarted.
Next we will talk about the configuration of MySQL on the server. Isn't it because we have to add "set namesutf8" to each database read/write to ensure Data Transmission Encoding consistency? Can we configure MySQL to achieve the three variables which are the character set we want by default? I did not mention the manual, and I did not find the answer online. Therefore, the line of code cannot be omitted from the server configuration perspective.
Conclusion: In order to make your webpage display normally on more servers, add "set names utf8", even if you do not add this sentence.
Reprinted from: http://hi.baidu.com/myt1988/blog/item/335786808ab7b8ce9123d9b7.html