我有一个 REST API 端点,可让您将文件上传到服务器。当我保存使用拉丁字母命名的文件时,没有问题。但是,当我尝试保存具有日语字符的文件时,该文件已保存并且服务器中的文件名没问题,但当我查看数据库时,文件名不正确。
保存文件时我的数据库中的结果:
但是当我查看服务器的 shell 时,文件名是正确的:
我尝试将数据库排序规则更改为:
utf8mb4_unicode_ci
utf8
utf8_general_ci
...但问题仍然存在。
更新:这是我插入数据的查询:
public function setFileQuery($param,$file){
$this->module_id = $param['moduleid'];
$this->file_name = $file['name'];
$this->file_size = $file['size'];
$q = "INSERT INTO data_file
(module_id,file_name,file_size,start_time,end_time,elapse_time,through_put)
VALUES
(?,?,?,?,?,?,?)";
$insertStmt = $this->conn->prepare($q);
$insertStmt->execute([
$this->module_id,
$this->file_name,
$this->file_size,
null,
null,
null,
null,
]);
Responses::http_ok();
}
最佳答案
首先,表排序规则应设置为
utf8mb4
。其次,确保数据字段(也称为列)排序规则也是
utf8mb4
。现在您可以插入数据(例如通过phpMyAdmin或通过任何PHP脚本):
PHP:
- 如果您使用PDO,请确保您已在连接中设置字符集,例如:
$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass);
- 如果您使用MySQLi:
$conn = mysqli_connect($servername, $username, $password, $dbname); /* change character set to utf8mb4 */ mysqli_set_charset($conn,"utf8mb4"); $mysqli->query("set names utf8mb4");
...然后执行查询,即:
mysqli_query( "INSERT INTO song( songname ) VALUES( 'あああ.txt' )" );
- 如果您使用PDO,请确保您已在连接中设置字符集,例如:
关于使用日语文件名上传的 PHP 文件在数据库中变成损坏的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70178773/