桃園市中小學資訊教育成果網站 包含 BSD & Linux 系統漏洞最新?
最新討論搜尋常見問題網站導覽網站統計會員註冊登入  
[提問]編碼錯誤

發表新主題   回覆主題   友善列印   郵寄朋友
 桃園市中小學資訊教育成果網站 首頁 » X學務系統版
上一篇主題 :: 下一篇主題  
發表人 附帶訊息
fm7809
Not too shy to talk


註冊時間: 2009-12-18
文章: 20

發表發表於: 星期二 三月 26, 2013 10:03 am    文章主題: [提問]編碼錯誤 引言回覆

各位先進好:

敝校灌centos想升級學務系統

結果前台是utf8中文正常

但是資料庫看是latin1

如圖:


原因是因為資料庫編碼寫入和讀出都設沒改就丟資料進來

如此負負得正的情況下前台還是可以正常顯示utf8但是資料庫上是亂碼

如圖:


我的問題是

雖然已經知道問題在哪,也可以將資料庫備出來轉檔,設定資料庫字碼為utf8
但是就是無法匯回去,原因可能是後來又有寫入新資料才會導致資料匯入有問題

請問各位先進有什麼方法可以解決這個問題?
回頂端
檢視會員個人資料 發送私人訊息
fm7809
Not too shy to talk


註冊時間: 2009-12-18
文章: 20

發表發表於: 星期一 四月 22, 2013 1:48 pm    文章主題: 引言回覆

沒有人回,我自己回報處理的情況

1.我用phpmyadmin將資料庫匯出,然後用ultraedit打開,檢視→設定字碼頁,選成uft8,然後另存新檔utf8的格式。



2.然後找另一台匯入,卻仍然是偽utf8的big5編碼,原因是因為mysql這個程式的編碼仍然是latin1。

3.在mysql內查詢

(1)登入mysql
mysql -u root -p密碼

(2)查詢centos資料庫編碼形式
show variables like 'character_set_%';

(3)嘗試修改
set character_set_server=utf8;

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


(4)改完發現,只是改好看的,重登入又被洗回成原本的編碼,在網路上找到方法,修改my.cnf
whereis my.cnf
my: /etc/my.cnf

(5)編輯my.cnf,將原本的latin1修改為utf8
vim /etc/my.cnf

[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
default-collation=utf8_general_ci
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid



(5)再重新匯入,發現匯入的仍然是錯誤編碼,將sql打開來看,終於發現問題在那邊
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;

這邊竟然是latin1,根據嘗試結果,sql檔要匯入除了sql本身必須是utf8編碼,然後許功蓋要處理,另外就是這邊也一定要改,這樣的sql才是真正的utf8編碼,這個小地方花了很多時間才瞭解。







(6)再重新匯入,發現可以匯入了,但是停在第61個資料庫,第62個匯不進去,同樣情況也發現在,其他單一資料庫中,共6個,這下問題縮小到只剩6個了。
第62個 3s7S8_sxs_honours_title
第73個 3s7S8_sxs_loger
第105個 3s7S8_sxs_stud_base
第110個 3s7S8_sxs_stud_lineal
第117個 3s7S8_sxs_stud_tutor
第119個 3s7S8_sxs_teacher_base

(7)mysql我覺得很麻煩的地方就是資訊顯示很不全,比如說3s7S8_sxs_teacher_base這個資料庫好了,匯入出現錯誤,但是訊息一直指出第三行有問題,但是事實上是很後面100多筆資料有問題,然後我就一直研究那邊出錯,才發現跟第三行一點關係都沒有,這個地方卡不少時間。

(因為sql的語法是使用INSERT INTO,如果這個INSERT INTO 一次丟100筆資料,假如裡面任一筆有錯會直接顯示第一筆錯誤,但是其實根本不知道錯在那邊 )

sql無法匯入的原因是因為全型字被切一半,然後這個前半個字會影響後面的資料,導致後面的資料庫全部亂掉,無法匯入,所以這時候只能在phpmyadmin中做苦工,一個一個點出來看,然後刪掉「�」儲存。




(8)「�」的問題,可以在phpmyadmin中使用搜尋解決,第62個 3s7S8_sxs_honours_title 要點進去才會發現「�」
但是
第73個 3s7S8_sxs_loger
第105個 3s7S8_sxs_stud_base
這二個錯誤並不是「�」的問題
而是裡面的資料不知為什麼超過了原本設置長度,還是要在phpmyadmin上看,搜尋「...」,然後打開來看為什麼內容多到要用...表示,有些是地址貼了二次,有些是一大堆空白,我曾經嘗試一次顯示3000筆然後搜,但是很怕伺服器負何不了,後來一次看300筆就順很多了。

接下來再重新匯入,確定132個資料庫可以一次匯出,轉存utf8後一次匯入資料庫,成功。

4.然後我將檔案壓縮丟到另一台主機做測試,結果字全部變成???,原因可能是因為網頁部分也是設定成錯誤的編碼方式,原本是負負得正,現在變成負正得負,所以網頁部分也需要修改。

原本的負負得正的情況
網頁顯示部分:顯示utf8,正確編碼,但是搜尋功能不能用 ← 資料庫讀出寫入:錯誤編碼將latin1以utf8方式寫入或讀出 ← 資料庫:變成亂碼

後來變成?的情況
網頁顯示部分:顯示???←資料庫讀出寫入:錯誤編碼將latin1以utf8方式寫入或讀出← 資料庫:utf8

所以問題出在程式的部分,使用邱老師的程式直接下載安裝新的版本,然後將模組都安裝完成(要和原本的相同),然後直接修改mainfile.php的對應的資料庫名稱及位址,完成。

嘗試X學務核心報表列印功能,可以成功搜尋出學生姓名,前台、後台都是正確的utf8。
回頂端
檢視會員個人資料 發送私人訊息
cmy
Home away from home


註冊時間: 2006-02-16
文章: 367
來自: 內壢國小

發表發表於: 星期六 五月 04, 2013 9:22 pm    文章主題: 引言回覆

恭喜啊,您已經完全搞清楚編碼轉換了,對其它想要轉碼的夥伴也會有很大的助益

我有一支程式用來轉換big5->utf8的學務系統資料庫,原理說明一下
1. 用big5(latin1)匯出
mysqldump -u user -ppass db --allow-keywords --default-character-set=latin1 --skip-extended-insert > db.sql
其中--skip-extended-insert是關鍵,這樣匯回時就不會有太大的INSERT指令

2. 轉換成utf8編碼
3. 修正資料庫中的文字
(1) latin1改utf8 (包含SET NAME那幾列的註解)
(2) 去掉許功蓋等的\ (總共有101個字要處理)

4. 以UTF8編碼建立新增資料庫
5. 匯回

如有需要 可下載 http://163.30.142.8/x/ctool3.sh
使用或研究
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
 桃園市中小學資訊教育成果網站 首頁 » X學務系統版 所有的時間均為 GMT + 8 小時
發表新主題   回覆主題   友善列印   郵寄朋友
1頁(共1頁)


 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
可以 在這個版面下載檔案
Powered by phpBB © 2001, 2002 phpBB Group
  RSS feeder  Atom feeder 回到頂端