兩個(gè)MySQL存儲(chǔ)過程中文問題的解決方案
MySQL數(shù)據(jù)庫(kù)存儲(chǔ)過程常出現(xiàn)以下這樣的問題:
1、存儲(chǔ)信息為亂碼,尤其通過執(zhí)行sql腳本添加數(shù)據(jù)最為常見。
2、使用where子句是,對(duì)中文字符串進(jìn)行比較,這個(gè)問題也是十分常見。
針對(duì)存儲(chǔ)信息為亂碼的問題,一定要注意執(zhí)行腳本的終端,系統(tǒng)默認(rèn)的字符編碼是你所要求的,這個(gè)問題歸根到底是mysql字符集的問題。MySQL的字符集支持(Character Set Support)有兩個(gè)方面:字符集(Characterset)和排序方式(Collation)。
對(duì)于字符集的支持細(xì)化到四個(gè)層次: 服務(wù)器(server),數(shù)據(jù)庫(kù)(database),數(shù)據(jù)表(table)和連接(connection)。
MySQL對(duì)于字符集的指定可以細(xì)化到一個(gè)數(shù)據(jù)庫(kù),一張表,一列,應(yīng)該用什么字符集。
與字符集相關(guān)的命令:
查看默認(rèn)字符集(默認(rèn)情況下,mysql的字符集是latin1(ISO_8859_1)
- mysql> SHOW VARIABLES LIKE 'character%';
- mysql> SHOW VARIABLES LIKE 'collation_%';
使用命令修改字符集:
- <pre name="code" class="html">
- mysql> SET character_set_client = utf8 ;
- mysql> SET character_set_connection = utf8 ;
- mysql> SET character_set_database = utf8 ;
- mysql> SET character_set_results = utf8 ;
- mysql> SET character_set_server = utf8 ;
- mysql> SET collation_connection = utf8 ;
- mysql> SET collation_database = utf8 ;
- mysql> SET collation_server = utf8 ;
出現(xiàn)問題1的原因是:設(shè)置了表的默認(rèn)字符集為utf8并且通過UTF-8編碼發(fā)送查詢,但這個(gè)connection連接層的編碼仍然不正確。解決方法是在發(fā)送查詢前執(zhí)行一下下面這句:
- SET NAMES 'utf8';
它相當(dāng)于下面的三句指令:
- <pre name="code" class="html">SET character_set_client = utf8;
- SET character_set_results = utf8;
- SET character_set_connection = utf8;
問題2解決方法:
對(duì)需要比較的兩邊變量或常量使用轉(zhuǎn)碼(COLLATE utf8_unicode_ci),如:
- declare cur_preferences cursor for select id from preferences where @name like concat("%",rTitle COLLATE utf8_unicode_ci ) ;
如果上面的語(yǔ)句優(yōu)化不成功,執(zhí)行下面的語(yǔ)句:
- declare cur_preferences cursor for select id from preferences where @name COLLATE utf8_unicode_ci like concat("%",rTitle COLLATE utf8_unicode_ci ) ;
這樣就可以解決這個(gè)問題。
關(guān)于MySQL數(shù)據(jù)庫(kù)存儲(chǔ)過程常見的問題就介紹到這里,如果您想了解更多關(guān)于MySQL數(shù)據(jù)庫(kù)的知識(shí),不妨看一下這里的文章:http://database.51cto.com/mysql/,希望您能有所收獲!
【編輯推薦】