成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

解決php存取mysql 4.1亂碼問題

瀏覽:28日期:2024-02-15 09:44:37

從MySQL 4.1開始引入的多語言支持確實(shí)很棒,而且一些特性已經(jīng)超過了其他的數(shù)據(jù)庫系統(tǒng)。不過我在測(cè)試過程中發(fā)現(xiàn)使用適用于MySQL 4.1之前的PHP語句操作MySQL數(shù)據(jù)庫會(huì)造成亂碼,即使是設(shè)置過了表字符集也是如此。

MySQL 4.1的字符集支持(Character Set Support)有兩個(gè)方面:字符集(Character set)和排序方式(Collation)。對(duì)于字符集的支持細(xì)化到四個(gè)層次: 服務(wù)器(server),數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection)。

查看系統(tǒng)的字符集和排序方式的設(shè)定可以通過下面的兩條命令:

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)

上面列出的值就是系統(tǒng)的默認(rèn)值。(很奇怪系統(tǒng)怎么默認(rèn)是latin1的瑞典語排序方式。)

當(dāng)我們按照原來的方式通過PHP存取MySQL數(shù)據(jù)庫時(shí),就算設(shè)置了表的默認(rèn)字符集為utf8并且通過UTF-8編碼發(fā)送查詢,你會(huì)發(fā)現(xiàn)存入數(shù)據(jù)庫的仍然是亂碼。問題就出在這個(gè)connection連接層上。解決方法是在發(fā)送查詢前執(zhí)行一下下面這句:

SET NAMES 'utf8';

它相當(dāng)于下面的三句指令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

再試試看,就正常了。

標(biāo)簽: PHP