顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2012年6月6日 星期三

mysql select latin1 編碼格式

直接在 phpmyadmin 使用 select 語法顯示出正常字串而非亂碼

latin1 to utf8 顯示文字內容

select CONVERT ( CAST ( `row_value` as BINARY )  USING utf8 ) as row_value from DB_TABLE

latin1 to big5  顯示文字內容

select CONVERT ( CAST ( `row_value` as BINARY )  USING utf8 ) as row_value from DB_TABLE

DB_TABLE資料表中 row_value 欄位使用 latin1 的編碼格式存檔 , 使用上例語法可直接將 latin1 轉成
需要的編碼格式在 phpmyadmin 真接顯示其內容 , 免改設定檔

參考資料 :
http://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/ 


phpmyadmin

libraries/select_lang.lib.php
$mysql_charset_map 
更改 utf-8 為  'utf-8' => 'latin1'  即可匯出 latin1 為正常顯常中文


2011年4月26日 星期二

SQL 計算欄位字串出現次數

資料表建立

CREATE TABLE `test1` (
`C1` int(11) NOT NULL auto_increment,
`C2` varchar(11) default NULL,
PRIMARY KEY (`C1`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8


INSERT INTO `test1` VALUES (1, '10442');
INSERT INTO `test1` VALUES (2, '4403');
INSERT INTO `test1` VALUES (3, '6513');
INSERT INTO `test1` VALUES (4, '2222');

SELECT 語法 for Mysql

方式 1

SELECT CHAR_LENGTH(Replace(C2,'4','4z'))-CHAR_LENGTH(C2) FROM TEST1 where C2 LIKE '%4%'

方式 2

SELECT CHAR_LENGTH(C2)-CHAR_LENGTH(Replace(C2,'4','')) FROM TEST1 where C2 LIKE '%4%'


原理 :
用replace的方式 , 取出 4 後將 4的部份變更字元數 , 就會增加字串的長度或減少 , 在使用 Len ( SQL ) , CHAR_LENGTH ( MYSQL ) 來計算字串的長度 , 將變更後的長度和原本長度互減就可找出字串欄位出現的次數

2011年3月10日 星期四

latin1_swedish_ci 轉 utf8_general_ci

工作時在備份前人的資料,發現它的結構竟然是用 latin1_swedish_ci 的格式,一整個讓人... , 為了日後方便作業,解定將它轉成 utf-8 備份
前置作業
現很多都雲端管理資料庫,所以可能無法使用mysqldump 的指令,除你可用ssh 連入管理OS,但我沒有權限 ORZ..,所以只好找方法進行。
在資料雲使用 phpmyadmin 匯出資料 (匯出的格式為utf8),在本機端 phpmyadmin匯入,匯入時需選文字編碼檔案格式為 latin1,匯入後本機端就可以進行 mysqldump

備份方式1 -- 使用phpmyadmin
1. 到 phpmyadmin 修改 phpMyAdmin/libraries/select_lang.lib.php 檔案

尋找 $mysql_charset_map = array 陣列 , 將
'utf-8' => 'utf8', 變更為 'utf-8' => 'latin1' ,

2. 至 phpmyadmin 匯出檔案 , 匯出檔案會使用 latin1 格式匯出
3. 使用文字編輯器開起後,使用全部取代

CHARSET=latin1 取代為 CHARSET=utf8

4. SQL 存檔格式記得要變更為 utf8

備份方式 2 -- 使用指令mysqldump
1. cmd 指令, 進入到 mysql/bin 底下
2. 備份SQL

平日備份方式
mysqldump -u{帳戶} -p {資料庫} > {備份檔名}.sql

範列:
mysqldump -uroot -p datebase > db.sql
以上是未處理格式的備份方式,所以備份出的格式看latin1會有亂碼,寫出來只是為了看平常如何用mysqldump備份



轉編碼格式備份方式
mysqldump -u{帳戶} -p --default_character-set={原編碼格式} --skip-set-charset {資料庫} > {備份檔名}.sql

範列:
mysqldump -uroot -p --default_character-set=latin1 --skip-set-charset datebase > db.sql
匯出後直接為 utf8 格式


匯入方式,目前未試出最完美的方式,因有一些資料紀錄的編碼會有其它的編碼格式,所以在編輯器會發現它是以亂碼的方式顯示,所以只好在編輯器內刪除無法匯入的紀錄,在進行匯入的動作