作者 主題: [經驗分享] MySQL 4.0.x 升級至 MySQL 4.1  (閱讀 89958 次)

0 會員 與 1 訪客 正在閱讀本文。

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
由於本來都是使用 MySQL 4.0 的為主要Database..
但是周六在更新我的 Server 的時候(我用 Mandrake Cooker 作為 Server)...
發現,Mandrake 10.2 以後似乎就沒有提供 MySQL 4.0.x 了!!...

所以伺服器在無意間,自動升級到 MySQL 4.1..

由於在 MySQL 4.1 以後,伺服器支援 Database Charset 的資料.但是.....
直接從 MySQL 4.0 升級上來的,所有內容的編碼不變化,但是Database 的編碼設定則是跑成 latin1 的格式....
這樣的話,在 dump資料時沒有指定正確的 charset 或是 mysql client charset 不同的時候,會發生內容錯誤的情況....(也就是很多人說會看到一堆 ??,或是一堆亂碼...)

或許在 client 跟 server 的 charset 都設定唯一樣的時候,取出的資料不會有錯誤(因為 mysql 不會在中間轉碼...)

目前我的做法:
我計劃將資料庫設定編碼都設定為 utf8 ,也就是進入資料庫後的資料都是以 utf8 方式存檔.

先利用 mysqldump --default-character-set=latin1 將資料進行 Dump ...
如此 dump 出來的資料會是正常的..
然後利用編輯器 vim or gedit or ultraedit 等....
修改dump出來的檔案.

將 每個Table 的 Default Charset 改為 utf8 .
同時在 Dump 的資料檔案最前面加上.
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

接著 若你原來的資料是以 utf8 儲存,則不用變動.
若用 big5 存入資料庫的,請利用 iconv -c -f big5 -t utf8 MysqDumpFile.sql 的方式,把內容的編碼轉換成為 utf8 格式.

接著..就把資料表 import 進入資料庫看看囉....
mysql -u root -p DatabaseName < MysqlDumpFile.utf8.sql

註.不建議各位 client Charset =  big5 去匯入.
因為有可能會遇到內容有 slashes 的問題(例如許功蓋).一律轉為 utf8 來 Import 進資料庫會比較沒有問題.
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #1 於: 2005-01-31 17:23 »
補充....

當資料表都是 utf8 格式後. 你的 php 程式還是跑 big5 阿...這時候該怎麼辦呢?...

只要在連線資料庫後立刻執行下面的SQL語法,設定 client charset ....
SET NAMES big5;
SET CHARACTER_SET_CLIENT=big5;
SET CHARACTER_SET_RESULTS=big5;

這樣取出跟存入的資料就會自動轉碼...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Loki

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #2 於: 2005-02-23 02:28 »
請教一下
我這個步驟
引用
先利用 mysqldump --default-character-set=latin1 將資料進行 Dump ...

dump下來的資料用編輯器查看sql檔內容
每個table並沒有Default Charset這項

而我先試著加入
代碼: [選擇]
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

之後還原到有裝MySQL 4.1.7的機器試試看看
出現Bus error (core dumped)訊息
請問問題可能是出在哪裡
謝謝

我的作業系統是FreeBSD 4.11
目前使用的MySQL版本為4.0.22

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #3 於: 2005-02-23 14:16 »
引述: "Loki"
請教一下
我這個步驟
引用
先利用 mysqldump --default-character-set=latin1 將資料進行 Dump ...

dump下來的資料用編輯器查看sql檔內容
每個table並沒有Default Charset這項

而我先試著加入
代碼: [選擇]
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

之後還原到有裝MySQL 4.1.7的機器試試看看
出現Bus error (core dumped)訊息
請問問題可能是出在哪裡
謝謝

我的作業系統是FreeBSD 4.11
目前使用的MySQL版本為4.0.22


由於你是在 mysql 4.0.x 下 Dump 的 ..
所以每個 table 應該沒有 charset 的相關設定....

我沒有試驗過直接拿 mysql 4.0.x  dump 的資料來直接 import 進 mysql 4.1 過...

不過應該也是一樣..但是要注意 資料內文的編碼是否與 CHARACTER_SET_CLIENT 等的相同....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Loki

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #4 於: 2005-02-24 00:47 »
我又重新試了一次
把備份的資料還原至MySQL 4.1上
再做上述的動作
發現還是有少部份的亂碼
和我先在MySQL設定一個utf8_general_ci的資料庫再還原回去的情形是一樣的

kiang

  • 活潑的大學生
  • ***
  • 文章數: 310
    • 檢視個人資料
    • 就這間電腦工作室
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #5 於: 2005-02-24 10:22 »
BIG5=>UTF8的時候可能要注意,如果過去BIG5的資料有加入跳脫字元,像是"許\",轉換後記得先將多餘的斜線取代,否則可能會出問題(新版沒有試過...)

我是選擇暫時不更新,因為好像UTF-8的部分關於中文字元集還沒準備好?嘗試匯入幾次資料都會遇到一些問題,所以繼續觀望...:)
****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #6 於: 2005-02-24 11:05 »
嗯嗯...就是因為資料庫作編碼轉換一直有問題....

所以還是建議大家 dump 出來的 big5 資料內容...
可以先用 iconv 或是 piconv 轉換成 utf8 後再匯入資料庫....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Loki

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #7 於: 2005-02-24 13:29 »
不過我的這份資料已經是UTF-8格式了
同樣是UTF-8 → UTF-8
換個資料庫版本看起來就不同了
這問題實在是很令人煩擾

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #8 於: 2005-03-11 16:48 »
感謝前輩分享經驗^^

小弟已成功的將我們單位的討論區轉移至MySQL 4.1

無論是資料庫或是php程式都已用iconv從big5轉移至utf8。

顯示也很正常:



現在只有一個很奇怪的問題:

我們討論區的設計是,只要一有人發表,就會寄出通知信給相關的管理員,但是收到的信在寄件人與主旨欄位都呈現亂碼:



而內容卻是正常的:



不知道是那裡的問題呢?

附上程式中關於寄信的片段程式碼:

程式碼

不知道那裡需要修改的呢?

小弟目前想到的解決辦法是把php程式碼全部轉回big5,如此應該可以解決亂碼的問題(猜的,還沒試過)

但是不知能否在全部都utf8編碼的情況下,將此一問題解決呢?

感謝各位指教 :D[/url]

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #9 於: 2005-03-11 17:22 »
郵件的 header 本來就不能用 8-bit. (當然多數的 mail 程式都可以認得這類不編碼的信件...)

只是, 你收信是在 utf-8 下看? 還是 big5 呢?
如果是前者, 應該不會出現問題吧. 如果是後者, 你的信件程式要怎麼知道這個字串應該是 utf-8 而不是 big5 才對呢?

不管怎樣, 通通用 base64 編碼就應該不會有問題了.

代碼: [選擇]
function mail_list($mail_title,$message){
  global $link;
  global $dbmail;
  $mailstr="select name,email from $dbmail where status='yes'";
  $mailresult=mysql_query($mailstr,$link) or die('cc'.mysql_error());
  $headers="MIME-Version:1.0\r\n";
  $headers.="Content-type:text/html;charset=utf-8\r\n";
  $headers.="From: =?UTF-8?B?".base64_encode("圖資學�{討論區轉寄")."?= <libit@nttu.edu.tw>\r\n";
  while(list($admname,$admemail)=mysql_fetch_row($mailresult)){
    mail($admemail,"=?UTF-8?B?".base64_encode($mail_title)."?=",$message,$headers);
  }
}


ps. 上頭中文在 phpbb 的 code 好像會有點問題.

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #10 於: 2005-03-11 22:40 »
我按照前輩的方法,將程式修改成:
代碼: [選擇]

$headers="MIME-Version:1.0\r\n";
$headers.="Content-type:text/html;charset=utf-8\r\n";
$headers.="From:".base64_encode('圖資學
  while(list($admname,$admemail)=mysql_fetch_row($mailresult)){
  mail($admemail,$mail_title,$message,$headers);
}


結果收到的信件標頭變成:
代碼: [選擇]

來源:  5ZyW6LOH5a2456iL6KiO6KuW5Y2A6L2J5a+E <libit@nttu.edu.tw>
收信: willie@xxx.com.tw
日期: Fri, 11 Mar 2005 22:15:24 +0800
標題: 5ZOI5ZOI


小弟也去了google以及php官網搜尋關於base64_encode函數用法,發現大部分的文件都是在嘗試解決如何附件2進位檔,小弟一時沒有找到可解決的辦法。

不知道程式是哪一部份發生了問題?或是是否有相關文件可供參考?感謝指導^^[/code]

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #11 於: 2005-03-11 22:43 »
你注意看看我的 code 與你的 code 之間有什麼差別?
那些在 base64_encode 前後 =? 混在一起的字, 並不是隨便打的, 是有意義的....

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #12 於: 2005-03-15 13:39 »
It works!!
非常感謝各位指導!!^_^

idarfan

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #13 於: 2005-04-01 12:25 »
首先感謝您熱情分享的文章, 但是我還是有疑問. 就是我還是一直出現亂碼
當我用php 連結 mysql 資料庫調閱出來的資料全是亂碼.

我所使用的版本是 appserv 2.4.3
Apache Web Server Version 1.3.33
PHP Script Language Version 4.3.10
MySQL Database Version 4.1.8
Zend Optimizer Version 2.5.7
phpMyAdmin Database Manager Version 2.6.1-rc2

以下是我的my.ini 的設定. 請幫我看一下是否有設錯

[client]

port=3306

default-character-set=utf8


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306


#Path to installation directory. All paths are usually resolved relative to this.
basedir=C:\AppServ/mysql

#Path to the database root
datadir=C:\AppServ/mysql/data

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
# The default storage engine that will be used when create new tables when
default-storage-engine=MYISAM

在圖型管理工具上我 phpmyadmin 及另一套是 EMS MySQL Manager 3 Lite
我用後者建立好了表格後. 再將DDL 的內容陳述如下 :

CREATE TABLE `panda_anti_virus` (
  `shop_id` int(11) NOT NULL auto_increment,
  `shop_name` varchar(40) character set utf8 NOT NULL default '',
  `shop_address` varchar(40) character set utf8 default NULL,
  `date` timestamp NOT NULL default '0000-00-00 00:00:00',
  `Active_code` varchar(40) character set utf8 NOT NULL default '',
  `customer_id` varchar(40) character set utf8 NOT NULL default '',
  `username` varchar(40) character set utf8 NOT NULL default '',
  `password` varchar(40) character set utf8 NOT NULL default '',
  PRIMARY KEY  (`shop_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin

接下我寫了一小段php 想把資料調閱出來, 結果全是亂碼.
我記得在安裝 appserv 2.4.3 時有問我選字集. 其中並沒有big5 or utf8 可供
選擇! 只能選 latin1 C:\AppServ\mysql\share\charsets 目錄下也找不到utf8 and big5 的相關的 xml files, 這會影嚮嗎?

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>申裝防毒軟體序號及註冊碼</title>
</head>
<body>
<?
$link=mysql_connect("localhost","root","12345") or
die ("連線失敗");
mysql_select_db("maintain");
$charset=mysql_query("SET NAMES big5; SET CHARACTER_SET_CLIENT=big5; SET CHARACTER_SET_RESULTS=big5;");
$result=mysql_query("select * from table2");
while ($row=mysql_fetch_array($result))
{
   echo " 店名稱 : " .$row[0]. "<br>";
   echo " 店地址 : " .$row[1]. "<br>";
   echo " 啟用碼   : " .$row[2]. "<br>";
}                     
mysql_free_result($result);
?>
</body>
</html>

請大家幫我看一下錯誤出在那. 謝謝
另外用appserv 裝好的並不會有 mysqldump 這個執行檔.
我要如何產生它呢?

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #14 於: 2005-04-01 22:04 »
$charset=mysql_query("SET NAMES big5; SET CHARACTER_SET_CLIENT=big5; SET CHARACTER_SET_RESULTS=big5;");

這個改一下...改成分開跑....
不要一個query跑三個 sql 看看....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

風車轉阿轉

  • 憂鬱的高中生
  • ***
  • 文章數: 127
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #15 於: 2005-05-08 20:54 »
mysql_query 不能用 ; 拆開幾個 sql 一起執行
就像是 Darkhero 兄說的要分開來

phpmyadmin 為什麼行呢?
他有用 parse 拆開 :p

mysqldump 是在 appserver 的 mysql/bin 資料夾下
一定會有的, 要用 command line 的方式執行

風車轉阿轉

  • 憂鬱的高中生
  • ***
  • 文章數: 127
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #16 於: 2005-05-27 19:21 »
各位學長好!

學弟這邊有個問題想請教大家
MySQL 4.1.11 & MySQL 4.1.12
以上這兩個版本不論是 Windows or Fedora Core 3 上面我都試過
發現在存某些字還是會發生亂碼
例如『銹』
其他還有幾個不知道是什麼的字 :(
如果用 phpmyadmin-2.6.2-pl1 寫入跟讀取是正常的
用自己寫的程式讀取由 phpmyadmin 寫入的字就變成「?」了
而由程式寫入跟讀取也都是『?』

網頁是使用 php 5.0.4 + mysqli function
db 是 utf8_unicode_ci
在取得資料前有跑下面這段
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
所以只有部分中文會有問題

不知各位學長是否有良策呢?
Thx!

willie0220

  • 憂鬱的高中生
  • ***
  • 文章數: 142
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #17 於: 2005-05-27 19:41 »
小弟自己的討論區不會有這樣的問題也

您的網頁確定也是用utf8編碼嗎

風車轉阿轉

  • 憂鬱的高中生
  • ***
  • 文章數: 127
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #18 於: 2005-05-28 14:58 »
sorry, 我打錯了, 應該是
SET NAMES big5;
SET CHARACTER_SET_CLIENT=big5;
SET CHARACTER_SET_RESULTS=big5;

我有將網頁還有上述改成 utf-8
是正常的 :)
不過尚屬開發階段所以還是使用 big5 編碼

有解嗎?

tim0406

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #19 於: 2005-09-25 23:59 »
請問~這個方法可以解決原本沒問題的資料轉碼~
那如果...資料庫裡面已經是亂碼了...
但是是UTF8格式....
這樣還有救嗎~?

unyleung

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #20 於: 2005-09-26 01:06 »
已big5轉換至utf8了,

代碼: [選擇]
ERROR 1064 (42000) at line 1: you have an error in your SQL syntax; check the manual that corresponds to your MYSQL server version for the right syntax to use near 'XX'

但用iconv 我有error
代碼: [選擇]
iconv : conversion to utf8 unsupported

我只是用EmEditor3轉換............

可以怎修正嗎....請大家幫幫忙....thanks

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #21 於: 2005-09-26 03:37 »
引述: "tim0406"
請問~這個方法可以解決原本沒問題的資料轉碼~
那如果...資料庫裡面已經是亂碼了...
但是是UTF8格式....
這樣還有救嗎~?


是何種亂碼?...

你的資料庫..若你確定 內容沒問題.但是用 phpMyAdmin2.6 進去看就是亂碼...

那麼你可以試試看 mysqldump 指定語系與Database的語系相同來dump 看看..
這樣基本上mysql 不會幫你轉.所以就是會保留原來資料內容.
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #22 於: 2005-09-26 03:38 »
引述: "unyleung"
已big5轉換至utf8了,

代碼: [選擇]
ERROR 1064 (42000) at line 1: you have an error in your SQL syntax; check the manual that corresponds to your MYSQL server version for the right syntax to use near 'XX'

但用iconv 我有error
代碼: [選擇]
iconv : conversion to utf8 unsupported

我只是用EmEditor3轉換............

可以怎修正嗎....請大家幫幫忙....thanks


第一個錯誤就在第一行..你應該先自己看看那個第一行寫了啥...

另外..這有可能是因為你用的轉嗎會產生BOM的關係...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

unyleung

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #23 於: 2005-09-26 10:00 »
引述: "Darkhero"

第一個錯誤就在第一行..你應該先自己看看那個第一行寫了啥...

另外..這有可能是因為你用的轉嗎會產生BOM的關係...


第一行就是因為讀不到中文字, 即很多中文字都有問題, 所以不在乎第幾句, 但我想了解bom是什麼?? 我都有找尋過網上妝有關網頁都有見過bom名字......可以解釋一下嗎?

tim0406

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #24 於: 2005-09-26 16:29 »
引述: "Darkhero"

是何種亂碼?...

你的資料庫..若你確定 內容沒問題.但是用 phpMyAdmin2.6 進去看就是亂碼...

那麼你可以試試看 mysqldump 指定語系與Database的語系相同來dump 看看..
這樣基本上mysql 不會幫你轉.所以就是會保留原來資料內容.


首先先感謝您的回應~
我的系統是FC4~MYSQL是4.1.11預設應該是UTF8
寫進去的時候phpmyadmin裡面是這樣......
&yen;x&yen;_&yen;&laquo;&curren;j&brvbar;w°&Iuml;&sup3;q&curren;&AElig;&micro;&oacute;38&laquo;&Ntilde;8-2&cedil;&sup1;2&frac14;&Oacute;
但是讀出來的時候是正常的.......
這樣是表示資料是正常的吧~~^^~

可是我DUMP出來的資料...也是長這樣..
&yen;x&yen;_&yen;&laquo;&curren;j&brvbar;w°&Iuml;&sup3;q&curren;&AElig;&micro;&oacute;38&laquo;&Ntilde;8-2&cedil;&sup1;2&frac14;&Oacute;

我用了iconv~piconv~ultraedit~
怎麼轉都沒辦法正常顯示的說....@@~
但是我匯入資料庫後...用php讀到網頁
資料都是正常的中文....

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #25 於: 2005-09-26 16:32 »
請不要猜測可能會是什麼編碼...
資料庫是你的.你應該要知道是什麼編碼才對.不知道也要去查.
這種事情,系統管理員不應該也不可以用猜的.


這應該就是說.
你資料表的內容與指定的語系並不相同導致的...

請看一下 phpMyAmin 中的系統狀態,環境設定等.
看一下到底表格式什麼編碼..
然後用那個編碼作 mysqldump 然後修正編碼設定部份..
再 Import 回去看看...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #26 於: 2005-09-26 16:43 »
給各位與tim0406類似情況的朋友們:

當你確定資料內容無誤(在自己寫的程式可以讀取寫入都正常),但是在 phpMyAdmin 中會是亂碼的時候..
最有可能的情況就是.資料內容與資料表格編碼不同...

請參考這樣的步驟去解決問題.
1. 先檢查該資料庫的編碼 例如,很多預設的會是 latin1
2. 使用 mysqldump --default-character-set=latin1 databaseName > myDatabase.sql
3. 使用vim or 其他你熟悉的編輯器,將檔案中的 latin1 修改為你資料庫所使用的編碼,例如 big5 or utf8 .
4. 使用 mysql --default-character-set=你用的編碼 database < myDatabase.sql

請注意先備份或是匯入到另外一個資料庫先測試.不要拿你正在跑的來這樣稿....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

tim0406

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #27 於: 2005-09-26 17:56 »
引述: "Darkhero"

這應該就是說.
你資料表的內容與指定的語系並不相同導致的...

請看一下 phpMyAmin 中的系統狀態,環境設定等.
看一下到底表格式什麼編碼..
然後用那個編碼作 mysqldump 然後修正編碼設定部份..
再 Import 回去看看...

呼...大大~
我要是早點遇到您~
我的人生一定會大大的不一樣...QQ~

我一值看資料表...的編碼...是UTF8沒錯....
但是....資料庫的編碼...
太感謝博士大大了~

最後請教一下大大~
您第二篇說到在資料庫連線後加入
mysql_query("SET NAMES 'big5'");
.....................................................
.....................................................
我看過有人說跟my.cnf加入
[mysqld]
default-character-set=big5
也是一樣可以~

可是我改了好像沒什麼效果~
先說我有重新啟動mysql喔....
你覺得這可行嗎~?
還是得重新編譯呀~^^"

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #28 於: 2005-09-26 18:23 »
你要知道改那個是什麼意思..不知道放了也是白放...

[mysqld]
default-character-set=big5

這是設定 Server 端的預設編碼...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

tim0406

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
[經驗分享] MySQL 4.0.x 升級至 MySQL 4.1
« 回覆 #29 於: 2005-09-27 02:31 »
引述: "Darkhero"
你要知道改那個是什麼意思..不知道放了也是白放...

[mysqld]
default-character-set=big5

這是設定 Server 端的預設編碼...


嗯恩~
我知道改這個的意思~
就是知道改了卻沒得到預期的作用才覺得奇怪
不過我已經從您再另依篇的回答找到答案嚕~
看來資料庫連線後的設定是不可避免了~
謝謝DARK大耐心的教導~^^~