在mysql存储过程中传递一串希腊字符?

时间:2016-12-08 14:10:32

标签: mysql database stored-procedures parameter-passing

In [33]: import matplotlib.animation as ma

In [34]: ma.FFMpegWriter.bin_path()
Out[38]: 
'ffmpeg'

In [39]: ma.FFMpegWriter.exec_key
Out[41]: 
'animation.ffmpeg_path'

In [42]: ma.FFMpegWriter.isAvailable()
Out[44]: 
True

In [45]: import matplotlib as mpl

In [46]: mpl.rcParams['animation.ffmpeg_path']
Out[46]: 
'ffmpeg'

In [47]: mpl.rcParams['animation.ffmpeg_path'] = 'jibberish'

In [48]: ma.FFMpegWriter.isAvailable()
Out[48]: 
False

In [49]: mpl.rcParams['animation.ffmpeg_path'] = 'ffmpeg'

In [50]: ma.FFMpegWriter.isAvailable()
Out[50]: 
True

}); },

我有一个列名为varchar(50)的表。我可以在插入查询中轻松设置希腊字符,如下所示:

insertStudentData:function(school_id,studentData,callback){


var _pass_student=Math.random().toString(36).substr(2, 8);
var _pass_father=Math.random().toString(36).substr(2, 8);
var _pass_mother=Math.random().toString(36).substr(2, 8);


    var data = [
        { tag: '_father_pass', value : _pass_father },
        { tag: '_mother_pass', value : _pass_mother },
       { tag: '_student_pass', value :_pass_student }];
            enc_data.getpass(8, data, function(result){

        query= 'call addStudentBulk("'+studentData[12]+'",'+studentData[15]+','+studentData[16]+',"'+studentData[1]+'","'+studentData[3]+'","'+studentData[2]+'","'+studentData[7]+'","'                            +studentData[4]+'","'+studentData[6]+'","'+studentData[13]+'","'+studentData[8]+'","'+studentData[14]+'","'+studentData[10]+'","'+studentData[11]+'","'+studentData[5]+'","'+studentData[9]+'","'+_pass_student+'","'+_pass_father+'","'+_pass_mother+'","'+result[2]['value']+'","'+result[0]['value']+'","'+result[1]['value']+'",'+school_id+')';

 dataAccess.getObject(query,function(status){

        if(status!='err')
        {
            console.log(studentData[12]+' '+studentData[1]+' done');
                      callback({err:false,data:null});

        }
       else
        {
            console.log(studentData[12]+' '+studentData[1]+ ' err');
    callback({err:true,data:studentData[12]+' '+studentData[1]+ ' err'});
        }
                                });

但是当我通过参数将这个希腊字符串传递给mysql存储过程时,它给了我这个错误:

insert into student set name='ΧΡΙΣΤΟΣ ΑΒΕΡΚΙΟΥ';

这是我的程序主体:

call new_procedure('ΧΡΙΣΤΟΣ ΑΒΕΡΚΙΟΥ');

Error Code: 1366. Incorrect string value: '\xCE\xA7\xCE\xA1\xCE\x99...' for 
column 'name_' 

我该怎么做?请帮我。 修改

我已经将表格设置为utf8; 我从NodeJs中的excel表导入数据。 excel表包含希腊字符,我想存储它们。这是表结构的图片 table structure

2 个答案:

答案 0 :(得分:1)

正如错误消息所示,您的字符串被正确编码为UTF-8但MySQL服务器没有预料到它。如果你真的想要使用UTF-8,我们还是完全清楚,但我们是在2016年,所以我们假设你这样做。

首先,您需要检查表结构。如果您没有保留原始的CREATE TABLE语句(或者它从未存在过因为您使用GUI工具在开发和生产中创建表),您可以使用此查询获取它:

show create table student

您的表应明确使用UTF-8。否则,您将依赖于创建数据库的人使用的任何默认值。您发布了一些GUI工具的图片,该工具表明student_name列使用UTF-8,但可能与表的其余部分具有不同的编码:如果为true,则表示等待发生问题的信号(但不会是你当前问题的根源)。无论如何,不​​要猜测,只要亲眼看看就可以了。

其次,我已经搜索了Node.js的mysql库并选择了第一个结果(假设你做了同样的事情)并找到了mysqljs/mysql。那个似乎不支持除UTF-8以外的任何东西,因此它甚至没有"编码"参数,但是,再一次,你应该自己验证它(毕竟,这甚至可能不是你的库)。

如果您不想使用UTF-8,请忽略此答案:它不适用于您的问题。

答案 1 :(得分:0)

在不知道所有细节的情况下,我会说该表不是为希腊字符编码的。 UTF-8应该能够处理希腊字符。

ALTER TABLE `student` CONVERT TO CHARACTER SET 'utf8'

其次,您需要确保要导入的文本以UTF-8编码。如果您是从网页上写的,那么您可以在元标记中定义字符集。

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

如果您要从CSV导入,可以将数据复制到notePad ++中,它应该能够将文本编码为UTF-8。