這幾天在用S3,
發現如果目錄有空格的話,
在Android裡用也放入空格的path是無法正常下載檔案的。
2012年6月24日 星期日
2012年6月16日 星期六
修改RDS的預設語系(解決MySQL???亂碼問題)
文章撰寫︰2012/6/17 11:34
文章修改︰2012/6/18 10:49
修改次數︰2
一、前言
RDS是亞馬遜上很方便的資料庫服務,他們提供了MySQL、mssql和Oracle等大型資料庫,而啟動的方式也像EC2一樣,設定一下,一臺專門提供資料庫查詢的server,就產生了。
二、文章開始
但是因為RDS預設是latin語系,我們在使用前必須將語系設為BIG5或UTF8,底下以UTF8為例。亞馬遜RDS服務在建立時,其實有一個地方可以設定"各種類型的DB屬性(DB Parameter Groups)",見下圖。
我建立了一個utf-8專用的屬性,名稱為msinstance01,但是我卻找不到能設定屬性的地方。
原來亞馬遜建議我們建立一個DB group參數後,使用他們提供的RDS tool去修改每種參數裡的設定。
(以下教學從亞馬遜RDS文件提供)
但是,環境變數需先設定好。
1.JAVA_HOME那些東西要設定好,這不用說了。
2.設好AWS_RDS_HOME,可以用下列指令在命令提示字元設定
C:\> set AWS_RDS_HOME=<path-to-tools>
3.將AWS_RDS_HOME底下的bin目錄設到path
C:\> setx PATH=%PATH%;%AWS_RDS_HOME%\bin
3.重開機
此時,基本的RDS_tool已經安裝完成。
接著要做一些較細項的相關設定,
1.設定AWS_RDS_HOME底下的credential-file-path.template檔,之後我們在使用RDS tool時,才能獲得修改的權限
2.進入命令提示字元,先設定你的RDS的region(擺放地區,看你的機臺放在哪裡而定)
C:\> set EC2_REGION=us-west-1
像我將機臺設在新加坡,這個值就是設
C:\> set EC2_REGION=ap-southeast-1
3.設定AWS_CREDENTIAL_FILE environment variable環境變數
C:\> set AWS_CREDENTIAL_FILE=<檔案路徑就是上面credential-file-path.template的路徑>
然後,你才能擁有修改DB Parameter Groups的權利。
4.我想要替我剛才建立出來的msinstance01設定成utf-8
C:\>rds-modify-db-parameter-group utfgroup --parameters
"name=character_set_connection, value=utf8, method=immediate"
--parameters "name=character_set_client, value=utf8, method=immediate"
--parameters "name=character_set_database, value=utf8, method=immediate"
--parameters "name=character_set_results, value=utf8, method=immediate"
--parameters "name=collation_connection, value=utf8_general_ci,
method=immediate" --parameters "name=collation_server,
value=utf8_general_ci, method=immediate"
這樣就修改完成了。
註︰上方的紅字請改成你的parameter group名稱
看一下DB Parameter Groups屬性表, 沒錯,值有被修改。
5.回到RDS Console頁,將RDS的參數設成剛才修改的msdbparameter
這樣就完成了RDS預設語系的修改。
三、總結
經過設定,你的RDS終於正式始用utf-8環境的資料庫了!如果用JSP使用RDS,
在使用JDBC連線前,
記得網址除了填上亞馬遜RDS提供的endPoint:3306以外,
還要在後面加上使用Unicode的設定。
整串用起來像這樣子︰
String final URL = "jdbc:mysql://msinstance04.c7xieywxei8h.ap-southeast-1.rds.amazonaws.com:3306?useUnicode=true&characterEncoding=utf-8";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(URL,ACCOUNT,PASSWORD);
紅色那段字將是解決亂碼很重要的關鍵哦!
因為電腦是很笨的,
如果你沒告訴RDS裡的DB說你要上傳的資料是utf-8編碼格式,
即使DB有utf-8編碼,
它也會笨笨的顯示成一堆????亂碼給你看喔!
訂閱:
文章 (Atom)