1

我有一个存储过程,里面有一些西里尔字符串。如果该列包含一些特定的字符串,我想检查一个带有 char 列的表,其中一些是西里尔文。问题似乎是我无法使用这些字符串创建过程。

SET NAMES utf8;

delimiter //
drop procedure if exists testutf8
//
create procedure testutf8()
begin
    select 'ξενοδοχια';
end
//
delimiter ;


call testutf8();

退货??????

show create procedure testutf8;

返回

程序 testutf8

sql_mode STRICT_TRANS_TABLES

创建过程“CREATE DEFINER= xxx@ %PROCEDURE testutf8()开始选择'?????????';结束”

character_set_client utf8

collat​​ion_connection utf8_general_ci

数据库整理 latin1_swedish_ci

所以尽管我使用 SET NAMES UTF8; 服务器似乎将我的代码变成了 latin1。我怎样才能解决这个问题?

4

3 回答 3

7

在存储过程中添加了输入变量

CHARSET utf8

所以它看起来像这样:

CREATE DEFINER=`root`@`%` PROCEDURE `post_content`(IN postName varchar(255), IN contentEn longtext, IN contentAR longtext CHARSET utf8, IN contentKU longtext CHARSET utf8)

...

于 2015-07-26T06:00:22.063 回答
1

将 ?characterEncoding=utf8 添加到服务器 url 就可以了。

于 2013-07-16T11:06:32.260 回答
0

尝试使用

delimiter //
drop procedure if exists testutf8
//
create procedure testutf8()
begin
   select CAST('ξενοδοχια' AS CHAR CHARACTER SET utf8);
end
//
delimiter ;
于 2013-07-15T09:34:49.633 回答