- 論壇徽章:
- 0
|
各位同仁,問題一直困擾了好久,希望在這里能有個答案:
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.00 sec)
函數(shù)如下:- DELIMITER $
- DROP FUNCTION IF EXISTS `freeagent`.`chs_test`$
- CREATE FUNCTION `chs_test`(seconds INT) RETURNS VARCHAR(255)
- BEGIN
- DECLARE str VARCHAR(255) CHARACTER SET 'utf8';
- SET str = '這是漢字';
- RETURN str;
- END$
- DELIMITER ;
復(fù)制代碼 將函數(shù)執(zhí)行進去:
[root/tmp]# mysql -uroot -proot testdb < chtest.sql
1. 可以看到,client端的字符集是latin1,select一切正常
mysql> select chs_test(1)
-> ;
+-------------+
| chs_test(1) |
+-------------+
| 這是漢字 |
+-------------+
1 row in set (0.00 sec)
2. 如果用utf8字符集,結(jié)果是亂碼:
mysql> set names 'utf8';
Query OK, 0 rows affected (0.00 sec)
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 |
+--------------------------+--------+
7 rows in set (0.00 sec)
mysql> select chs_test(1);
+------------------+
| chs_test(1) |
+------------------+
| ÕâÊǺº×Ö |
+------------------+
1 row in set (0.00 sec)
3. 用gbk同樣是亂碼
mysql> set names 'gbk';
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.00 sec)
mysql> select chs_test(1);
+-------------+
| chs_test(1) |
+-------------+
| ??????¡Á? |
+-------------+
1 row in set (0.00 sec)
字符集到底應(yīng)該怎么設(shè)置呢?貌似函數(shù)里面的中文不太好設(shè)置。我的經(jīng)驗是,在導入數(shù)據(jù)的時候客戶端字符集用gbk,這樣select的時候都能OK。
上面的函數(shù)我在往數(shù)據(jù)庫執(zhí)行的時候,嘗試了utf8跟gbk都不work。
謝謝 |
|