【问题标题】:Umlauts in filename not stored correctly in MySQL database文件名中的变音符号未正确存储在 MySQL 数据库中
【发布时间】:2017-08-09 04:41:48
【问题描述】:

我的网络应用程序中有一个文件上传。用户可以通过 file-model 指令上传文件。我将文件数据保存在 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 变量中的文件名已经存储错误,但我不知道如何修复它。

【问题讨论】:

  • Java 不是 JavaScript。

标签: javascript mysql angularjs utf-8 wildfly


【解决方案1】:

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

另外,检查您的选择和插入语句是否使用 N 来选择列。像这样:

SELECT N'some text';

【讨论】:

  • 定义为 VARCHAR(255),UTF-8 编码。
  • 哦!然后请检查 select 和 insert 语句。请参阅我上面的更新评论。
  • 在读取文件名时,问题似乎是在说谎。当我在视图中打印文件名时,变音符号在保存数据之前就已经显示错误。
  • 如果您使用 ajax 以 JSON 格式将数据发布到服务器,那么您可以尝试将 --> contentType: "application/x-www-form-urlencoded;charset=UTF-8" 添加到您的阿贾克斯代码。或者这个 --> beforeSend : function(xhr) { xhr.setRequestHeader('Accept', "text/html; charset=utf-8"); },
  • 我正在使用 angulars $http 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2017-01-15
  • 2011-01-04
  • 1970-01-01
  • 2018-10-15
  • 2011-06-30
相关资源
最近更新 更多