mysql字符乱码????????????

news/2024/5/19 18:18:39 标签: mysql, phpmyadmin, collation, character, flex, wordpress

I promise this is gonna be the last time on it :-)

自從寫完下面兩篇文章:

wordpress 1.5升級注意事項 - 中文亂碼篇

mysql 4.1中文亂碼第二擊

過去幾個月就不斷有來信詢問各種 mysql 中文相容的問題,所以有機會看到許多玩家們用的各式連接法與程式,實在太開眼界。

最近因為轉換到 flex 2做為開發平台並重寫一些產品,許多去年寫的 framework 就無法使用,而其中有部份專門處理多國語系的library也隨之失效,導致我得重新面對這個問題,所以正好籍此機會將一些新心得整理出來。

mysql中文亂碼的原因

mysql 會出現中文亂碼的原因不外乎下列幾點:

-mysql server本身設定問題,例如還停留在 latin1

-mysql table 的語系設定問題(包含 charactercollation)

-客戶端程式(例如 php) 的連線語系設定問題

在之前的兩篇文章中已介紹過如何設定 mysql server/table 的 character/collation

接下來只需要補充幾點注意事:

mysql中文亂碼必勝解決法

1、mysql 啟動時會讀取一個預設的 config 檔,一般名稱為 my.ini,而它會到下列兩位置去尋找這個檔案:

C:/windows/my.ini 也就是作業系統的安裝目錄,也有可能是 C:/winnt/my.ini
C:/:my.cnf 也就是 C disk 的根目錄

注意不同位置裏的檔案suffix不一樣,這點在之前的文章中沒有特別強調,因此那時我是用更複雜的方法直接重新將mysql 註冊到 service裏面,並在那裏指定 my.ini的位置。

2、my.ini 裏的內容為:

[mysqld]
default-character-set=utf8

[client]
default-character-set=utf8
init_connect='SET NAMES utf8'

其中 mysqld 是指定 server啟動時要用的語系,但如果這裏設定為 utf8可能會讓許多英文軟體不開心,例如 osCommerce/mediaWiki,所以這裏建議設成 latin1。

下面的 client 則是設定當 client 連線時要使用什麼語系,但可惜的是這個設定不是每個client都會鳥它,基本上只有 mysql 自已家的程式,例如 mysql.exe, mysqld.exe, mysqladmin.exe 或是 MySQL Control Center這種程式會去讀取這個設定檔然後改用 utf8 連線。

note: 感謝 b6s 桑熱情相助提供第二行指令,據說比一支支php程式去設定connection setting更快,這樣應該也可以順便解決phpmyadmin無法正確顯示 unicode 中文的問題(不過 amfphp 到是不吃這套,一定要乖乖的自已設定語系才行)

但大部份工程師應該都是自已寫 php/jsp 程式去連線,此時自然不會讀取這個設定而繼續使用預設的語系 - latin1。

這也正是八成來信朋友陣亡的地方。

通常我會用一個獨立的檔案來處理 mysql connection的設定,例如:
PLAIN TEXT
PHP:

   1.
      <?
   2.
      //database connection details.
   3.
      $host = "localhost";
   4.
      $link = mysql_connect($host, "xxx", "xxx");
   5.
      mysql_query("SET NAMES 'utf8'");
   6.
      mysql_select_db("your_table_name_here", $link);
   7.
      ?>

請注意在 mysql_connect後第五行的地方有加上一個 "set names 'utf8' "的指令,告訴mysql 這個 connection 之後的連線內容都要使用utf8,經過這樣設定後,通常就可以解決大部份問題。

從這裏也可以推想得知,如果你有用某種custom connection pooling機制,就要記得在每次建立新的connection後立即設定為 utf8。

這組設定經過幾天的反覆測試(使用中文繁、簡、日文、韓文)後已經証實完全不會有亂碼或是某些字變成 "口"。

例子:試者輸入這幾個字「不道可否囉」如果它們能正確進入mysql再被讀出來,那就是中文沒問題了,如果讀出來後變成『口』字那就是革命還未成功同志仍需努力...orz

當然我也順便驗証了 flex2 - amfphp - php - mysql 來回傳resultset 也不再會有中文亂碼問題,可以安心使用囉。
by admin


http://www.niftyadmin.cn/n/761442.html

相关文章

购物车思路分析

如果看了我这个代码还不会购物车&#xff0c;那我就要去自杀了~ &#xff01; 购 物车主要是利用 session 传值和动态数组来实现的 为 了描述方便&#xff0c;我在这里做一些设置&#xff0c;物品显示页面为 wupin.php , 购物车 页面为&#xff1a; gwc.php, 物…

perforce版本控制系统 配置

Perforce的安装配置其实非常简单&#xff0c;官网上能下载服务器和客户端即可进行&#xff0c;Windows平台下的安装程序路径是&#xff1a;http://www.perforce.com/perforce/downloads/ntx86_64.html 服 务器端的安装程序是perforce.exe 客户端P4V的安装程序是p4vinst.exe 服…

求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数(天数)

方法一 &#xff1a;先用strtotime转换成unix时间戳&#xff0c;然后相减&#xff0c;除以 一天的秒数 86400. 方法二 &#xff1a;先用mktime转换成unix时间戳&#xff0c;然后相减&#xff0c;除以 一 天的秒数 86400. 具体代码如下&#xff1a; 方法一&#xff1a; <?…

IE6、 IE7、Firefox CSS兼容技巧

CSS技巧 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字&#xff0c;就垂直居中了。缺点是要控制内容不要换行 2. margin加倍的问题 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方…

未授予用户在此计算机上的请求登录类型

以net use 远程调用一台XP的机器出现上述提示&#xff0c;通常该台肯定未加入域&#xff0c;从某种角度来说&#xff0c;加入域的机器更容易登录些。如果一台单独的XP要远程登录的话&#xff0c;得在本地安全设置里&#xff0c;将“拒绝从网络访问这台计算机”中将GUEST帐号去掉…

php 冒泡排序

<script type"text/javascript"></script> 基本概念是&#xff1a;依次比较相邻的两个数&#xff0c;将小数放在前面&#xff0c;大数放在后面。即首先比较第1个和第2个数&#xff0c;将小数放前&#xff0c;大数放后。然后比较第2个数和第3个数&#…

java抽象类和抽象方法

抽象类就是不能使用new方法进行实例化的类&#xff0c;即没有具体实例对象的类。抽象类有点类似“模板”的作用&#xff0c;目的是根据其格式来创建和修改新的类。对象不能由 抽象类直接创建&#xff0c;只可以通过抽象类派生出新的子类&#xff0c;再由其子类来创建对象。当一…

接口与抽象类

文章摘要&#xff1a; java 抽象类和接口和继承之间关系 有时候&#xff0c;我们可能想要构造一个很抽象的父类对象&#xff0c;它可能仅仅代表一个分类或抽象概念&#xff0c;它的实例没有任何意义&#xff0c;因此不希望它能被实例化。例如&#xff1a;有一个父类 水果&…