Tengo un punto final de API REST que le permite cargar un archivo en el servidor. Cuando guardo un archivo que se nombra usando el alfabeto latino, no hay problema. Pero cuando trato de guardar un archivo que tiene un carácter japonés, el archivo se guarda y el nombre del archivo en el servidor está bien, pero cuando miro en la base de datos, el nombre del archivo no es correcto.
El resultado en mi base de datos al guardar el archivo:
Pero cuando miro el shell del servidor, el nombre del archivo es correcto:
Intenté cambiar la intercalación de la base de datos en:
utf8mb4_unicode_ciutf8utf8_general_ci ... pero el problema persiste.Actualización: Esta es mi consulta para insertar los datos:
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(); }Primero, la intercalación de la tabla debe configurarse como utf8mb4 .
En segundo lugar, asegúrese de que las intercalaciones del campo de datos (también conocido como columna) también sean utf8mb4 .
Ahora puede insertar datos (por ejemplo, a través de phpMyAdmin o a través de cualquier script PHP ):
PHP :
$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass); $conn = mysqli_connect($servername, $username, $password, $dbname); /* change character set to utf8mb4 */ mysqli_set_charset($conn,"utf8mb4"); $mysqli->query("set names utf8mb4");... y luego ejecutar la consulta, es decir:
mysqli_query( "INSERT INTO song( songname ) VALUES( 'あああ.txt' )" );