在MySQL中我的函数的功能是根据传入的日期参数返回星期:
CREATE FUNCTION getXingQi(riqi DATETIME) RETURNS VARCHAR(6)
BEGIN
DECLARE i_xq INT;
SET i_xq = WEEKDAY(riqi);
IF i_xq = 0 THEN
RETURN '星期一';
ELSEIF i_xq = 1 THEN
RETURN '星期二';
ELSEIF i_xq = 2 THEN
RETURN '星期三';
ELSEIF i_xq = 3 THEN
RETURN '星期四';
ELSEIF i_xq = 4 THEN
RETURN '星期五';
ELSEIF i_xq = 5 THEN
RETURN '星期六';
ELSEIF i_xq = 6 THEN
RETURN '星期天';
ELSE
RETURN '';
END IF;
END;
//成功存入数据库中,
当执行的时候
SELECT getXingQi(NOW());报错:
错误码: 1366
Incorrect string value: '\xD0\xC7\xC6\xDA\xB6\xFE' for column 'getXingQi(now())' at row 1Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000我的数据库刚开始时utf8的会出现这个问题,我改为gbk的重启,重新创建function还是出现此问题?
请问这是什么原因?如何解决?
CREATE FUNCTION getXingQi(riqi DATETIME) RETURNS VARCHAR(6)
BEGIN
DECLARE i_xq INT;
SET i_xq = WEEKDAY(riqi);
IF i_xq = 0 THEN
RETURN '星期一';
ELSEIF i_xq = 1 THEN
RETURN '星期二';
ELSEIF i_xq = 2 THEN
RETURN '星期三';
ELSEIF i_xq = 3 THEN
RETURN '星期四';
ELSEIF i_xq = 4 THEN
RETURN '星期五';
ELSEIF i_xq = 5 THEN
RETURN '星期六';
ELSEIF i_xq = 6 THEN
RETURN '星期天';
ELSE
RETURN '';
END IF;
END;
//成功存入数据库中,
当执行的时候
SELECT getXingQi(NOW());报错:
错误码: 1366
Incorrect string value: '\xD0\xC7\xC6\xDA\xB6\xFE' for column 'getXingQi(now())' at row 1Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000我的数据库刚开始时utf8的会出现这个问题,我改为gbk的重启,重新创建function还是出现此问题?
请问这是什么原因?如何解决?
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码
在新字符集下重新建立UDF试试
mysql> show variables like '%char%';
+--------------------------+---------------------------+
| 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 |
| character_sets_dir | D:\mysql6\share\charsets\ |
+--------------------------+---------------------------+
8 rows in set (0.02 sec)mysql> select getXingQi(now());
ERROR 1305 (42000): FUNCTION getXingQi does not exist
mysql> use mydb;
Database changed
mysql> select getXingQi(now());
+------------------+
| getXingQi(now()) |
+------------------+
| 鏄熸湡浜? |
+------------------+
1 row in set (0.00 sec)mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)mysql> select getXingQi(now());
+------------------+
| getXingQi(now()) |
+------------------+
| 星期二 |
+------------------+
1 row in set (0.00 sec)mysql>
看看我测试的结果。字符集设置成UTF8的。
mysql> show variables like 'char%';
-> //
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ |
+--------------------------+---------------------------------------------------------+然后把character_set_server也设置为gbk的set character_set_server = gbk;
这样删除原来的函数重新执行一次,就OK了