Today, when I used PHP to operate the database, I found that the Chinese fields inserted into the SQL Server 2008 database were garbled. Here are some of my initial situations:
The development environment is php5.3.3+Apache2.2.17+SQL Server 2008. The encoding of the php script file is utf-8, and the encoding passed to the database is GB2312 (the default character encoding of SQL Server may be this, I am not sure). I use the SQLSRV library officially provided by Microsoft to connect to the database (PS: SQL Server 2005 no longer supports using mssql.dll to connect), so use the sqlsrv_query($conn, "set names GB2312"); statement to set the encoding format passed to the database. The sql statement is written like this: insert into Opinion (content) values ('aaa Chinese content');
Run this sql statement and find that the execution is unsuccessful. Use the sqlsrv_errors() function to output the error message and get the following results:
Copy code The code is as follows:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [ 1] => -46 [code] => -46 [2] => An error occurred translating the query string to UTF-16: �Cast �д� Unicode �ַ����ճ�䵽���ַ� . [message] => An error occurred translating the query string to UTF-16: �Cast . Copied. From "An error occurred translating the query string to UTF-16" we can see that it is caused by a problem with character encoding conversion. So I used PHP's iconv function to force encoding conversion of Chinese, and then executed the SQL statement. The code is as follows:
Copy code
The code is as follows: $string = iconv('utf-8', 'GB2312//IGNORE', 'aaa Chinese content');
$sql = "insert into Opinion (content) values ( $string)";
[code]
At this time, another error was reported. The error message is as follows:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => ; 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa�������� ' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) )
There is no clue to this error message. I output the sql statement to the web page to see if the sql statement was written incorrectly. The output results are as follows:
Copy code
The code is as follows: insert into Opinion (content) values (aaa��������)
咋一It seemed like there was no problem, but in fact there was. I noticed that the parameter in the brackets at the back should be enclosed in quotation marks (indicating that it is a string), so I modified the sql statement again. The code is as follows:
Copy code
The code is as follows: $sql = "insert into Opinion (content) values ( '".$string."') "; To see clearly, I will zoom in
Use single quotes to enclose $string, so that the sql statement will be executed successfully, and the Chinese saved in the database will not be garbled.
http://www.bkjia.com/PHPjc/325615.html
www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325615.htmlTechArticleWhen I used PHP to operate the database today, I found that the Chinese fields inserted into the SQL Server 2008 database were garbled. Here is what I started with Some situations: The development environment is php5.3.3+Apache2.2.17...