【问题标题】:pass a string of greek character in mysql stored procedure?在mysql存储过程中传递一串希腊字符?
【发布时间】:2017-04-23 19:33:06
【问题描述】:
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'});
        }
                                });

}); },

我有一个列名为 varchar(50) 的表。我可以像这样在插入查询中轻松设置希腊字符:

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

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

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

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

这是我的程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(in name_ varchar(45) )

 BEGIN
 INSERT INTO `student` (`student_name`) VALUES (name_);
 END

我该怎么做?请帮我。 编辑

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

【问题讨论】:

  • 您的字符串被编码为 UTF-8。您的部分工具链未配置为使用此类编码。请编辑问题并分享:1)您的表定义 2)您设置连接编码的 JavaScript 代码。
  • 没关系。如果您重新考虑您的假设,请随时提供所需的信息,我很乐意查看。
  • 你还需要什么@ÁlvaroGonzález。 ?
  • 如果可能:1) 您的表定义 2) 您设置连接编码的 JavaScript 代码。
  • javascript 代码在上面这里 studentData 是 excel 表的对象是数组的数组(excel 表的行数组)。我通过诸如 studentData[2] 之类的索引来访问。

标签: mysql database stored-procedures parameter-passing


【解决方案1】:

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

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

show create table student

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

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


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

【讨论】:

  • 感谢您的美好时光@Alvaru 我设法在本地做到了。在现场仍然遇到问题。会努力的
【解决方案2】:

在不了解所有细节的情况下,我会说该表未针对希腊字符进行编码。 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。

【讨论】:

  • 我正在从 excel sheet.xlsx 导入数据
  • 如果我通过查询简单插入但 dnt 与过程一起工作,这工作正常:(
猜你喜欢
  • 1970-01-01
  • 2016-06-03
  • 2013-04-12
  • 1970-01-01
  • 2011-08-13
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多