文件名中的变音符号未在MySQL数据库中正确存储

时间:2017-03-17 14:53:24

标签: javascript mysql angularjs utf-8 wildfly

我的网络应用程序中有文件上传。用户可以通过file-model指令上传文件。我将filedata保存在JSON中并将其发送到Wildfly服务器上的端点。我将文件数据保存在MySQL数据库中。在控制台(客户端)中打印文件名时,文件名中没有变音符号错误。在保持文件名并在Eclipse控制台中打印文件名之前,我没有看到任何错误。但是,在数据库中,文件名保存错误(例如testä.jpg变为testa?.jpg)。此外,当在视图中将数据发送到服务器之前打印具有该文件名的字符串时,它也会显示为testa?.jpg。我已经在种子页面的头部包含了<meta charset="utf-8">。 数据库中的字段filename编码为UTF-8,并具有排序规则utf8_general_ci。数据库/服务器设置和JVM选项似乎不是问题,因为如果在文本字段中键入变音符号,我可以正确保存变音符号。

以下是检索文件数据的方法:

$scope.submit = function () {

    $scope.employeePhoto = {};
    var f = document.getElementById('file').files[0];
    r = new FileReader();

    r.onloadend = function(e){
        var data = e.target.result;
        $scope.employeePhoto.photoContent = uint8ArrayToArray(new Uint8Array(data));
        $scope.employeePhoto.fileName = $scope.UploadFile.name;
    }
    // http request to the endpoint
}

问题可能是$scope.UploadFile.name变量中的文件名已经存在错误,但我不知道如何修复它。

1 个答案:

答案 0 :(得分:1)

请检查MySQL中的列是否定义为VARCHAR(n)CHARSET utf8。从你的解释来看,这应该是我能想到的唯一问题。

另外,检查select和insert语句是否使用N来选择列。像这样:

SELECT N'some text';