My hosting provider changed the mysql server default value of the character_set_server
and character_set_database
system variables from latin1
to utf8mb4
.
Since then, the file upload functions failes with the following fatal error:
Fatal error: Uncaught mysqli_sql_exception: Incorrect string value: '\xF6' for column 'city' at row 1 in upload.php:98 Stack trace: #0 upload.php(98): mysqli->query('INSERT INTO ...') #1 {main} thrown in upload.php on line 98
The following points I've checked so far:
Variable character_set_system
seems odd.
<?php$db = new mysqli($host, $user, $pass, $dbas);if ($db->connect_errno) { echo "Failed to connect to MySQL: (" . $dbmysqli->connect_errno . ") " . $db->connect_error;}$db->set_charset('utf8mb4');var_dump( $db->get_charset() );
Result of the var dump is the following:
{ ["charset"]=> string(7) "utf8mb4" ["collation"]=> string(18) "utf8mb4_general_ci" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(4) ["number"]=> int(45) ["state"]=> int(1) ["comment"]=> string(13) "UTF-8 Unicode"}
The collation of the table and of all fields was changed to utf8mb4_general_ci
.
I've checked the encoding of the values before the SQL INSERT execution with mb_detect_encoding( $value, "auto" );
and it's UTF-8.
I've no clue what to check or what to do. Can anyone help?