2013-09-23 42 views
2

以下查詢是否有任何較短的等效項:(我無法更改表)。演員是否適用於此?我的SQL castr運算符

select convert(old_text using utf8) as text, 
    convert(rev_timestamp using utf8) as ts, 
    convert(rev_user_text using utf8) as user from revision; 

更新:表模式是:

CREATE TABLE `revision` (
    `rev_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `rev_page` INT(10) UNSIGNED NOT NULL, 
    `rev_text_id` INT(10) UNSIGNED NOT NULL, 
    `rev_comment` TINYBLOB NOT NULL, 
    `rev_user` INT(10) UNSIGNED NOT NULL DEFAULT '0', 
    `rev_user_text` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'latin1_bin', 
    `rev_timestamp` BINARY(14) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', 
`old_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
`old_text` MEDIUMBLOB NOT NULL, 
`old_flags` TINYBLOB NOT NULL, 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 

回答

0

最好是改變你的表,並設置UTF8您需要的列,而不是每次將它們轉換

ALTER TABLE t MODIFY old_text CHAR(50) CHARACTER SET utf8; 
    ALTER TABLE t MODIFY rev_timestamp CHAR(50) CHARACTER SET utf8; 
    ALTER TABLE t MODIFY rev_user_text CHAR(50) CHARACTER SET utf8; 

,然後選擇他們正常。

select old_text as text, rev_timestamp as ts, rev_user_text as user 
from revision; 

注:約CHAR(50),將其更改爲您的需求。

+0

它不會改變當前行的格式。 – PHPst

0
set names utf8; 

SELECT old_text AS text, rev_timestamp AS ts, rev_user_text AS user 
FROM revisions; 

......但是如果你發送DML在一個不同的字符集中,這會中斷。

+0

是的,這不適合我。 – PHPst

+0

「不起作用」不是有意義的描述,也不是錯誤信息。 – symcbean

+0

請參閱更新後的問題(表格架構) – PHPst

0

修改最簡單的方法,就是修改mysql中的字符集鍵my.ini文件,

default-character-set = utf8 
character_set_server = utf8 

修改後,重新啓動mysql服務,服務的mysql重啓

+0

錯誤。這不會轉換任何東西。新插入的數據將是ut8是的,但沒有別的。 – fancyPants