3

У меня проблемы с отображением в таблице mydatabase символов латинского алфавита. (Ä, ö, á, é, í, ...). Я использую сервер WAMP с Apache 2.4.9 и MySQL 5.6.17.

У меня есть простая форма, которую я создал в HTML, и у меня есть PHP-код, который запускает запрос и создает учетную запись. Вот код PHP:

include('config.php'); //My database data for connection

if(isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

    $query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
    $execute_query = mysqli_query($connection, $query);
    if($execute_query) { 
        //Creates the account
    }
    else { 
        //If an error occures
    }
}

Теперь, например, я создаю учетную запись с:

Username: Luís
Password: 1234
E-mail: somemail@mail.com

Когда я проверяю таблицу, она показывает созданную учетную запись, но имя пользователя показывает LuÃs вместо Luís.

Вещи, которые я пробовал:

Creating a DataBase and Table with:
utf8_general_ci
utf8_unicode_ci
utf8mb4_general_ci
utf8mb4_unicode_ci
latin1_swedish_ci

Никто из них не работал, это всегда показывает, что М вместо í.

2 ответа2

1

Я исправил проблему с помощью запроса "SET NAMES utf8".

include('config.php'); //My Database data for connection.
//Connection set with $connection = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db)

if(isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

    $connection->query("SET NAMES utf8"); //FIXED (Gets $connection from config.php and runs the query "SET NAMES utf8")
    $query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
    $execute_query = mysqli_query($connection, $query);
    if($execute_query) { 
        //Creates the account
    }
    else { 
        //If an error occures
    }
}

Спасибо @JakeGould за попытку помочь мне, ведь у меня не было проблем с таблицей базы данных. Моя база данных и таблица были установлены с CHARSET = utf8 и COLLATE = utf8_unicode_ci.

0

Диагностика корня проблемы.

У меня проблемы с отображением в таблице mydatabase символов латинского алфавита. (Ä, ö, á, é, í, ...)

Это имеет все признаки несоответствия кодировки между вашими данными формы HTML, файлом PHP и MySQL. Я предполагаю, что проблема заключается в том, что ваша HTML-форма и PHP-файл отправляют данные UTF8 - поскольку в настоящее время UTF8 является методом кодирования по умолчанию - в базу данных MySQL, которая настроена (по умолчанию) для использования кодировки latin1_swedish_ci .

Так что это одна из тех проблем «шесть из одного, полдюжины из других», где вы можете теоретически изменить кодировку в файле HTML и PHP на latin1_swedish_ci . Но это довольно регрессивно в современном мире Интернета и в мире веб-разработки.

Поэтому я бы порекомендовал убедиться, что вся ваша цепочка данных - от формы HTML до PHP и базы данных MySQL - полностью UTF8. Как только вы получите все в UTF8, жизнь станет проще по многим причинам.

Что касается того, почему вы видите эту проблему, потому что (по умолчанию) большинство MySQL устанавливает set latin1_swedish_ci вместо utf8_general_ci для вновь созданных баз данных. Так что вы на правильном пути в ваших попытках исправить это.

Но есть несколько вещей, которые вам нужно сделать, чтобы получить базу данных MySQL - и сервер Datives - для правильной обработки кодировки символов и, в данном случае, кодировки UTF8.

Шаги, которые вы можете предпринять, чтобы решить проблему.

Сначала измените параметры сортировки базы данных и повторите попытку.

ALTER DATABASE [name of your database] CHARACTER SET utf8;

Если это конкретная таблица, параметры сортировки можно изменить следующим образом:

ALTER TABLE [name of your table] CONVERT TO CHARACTER SET utf8;

И если это конкретный столбец в таблице:

ALTER TABLE [name of your table] MODIFY [name of your column] [other settings] CHARACTER SET utf8 COLLATE utf8_general_ci;

Или, возможно, вы можете экспортировать текущую базу данных, создать новую базу данных с помощью этой команды и повторно импортировать данные:

CREATE DATABASE [name of your database] CHARACTER SET utf8 COLLATE utf8_general_ci;

И если вы хотите внести постоянные изменения в установку MySQL на компьютере, что вызывает проблемы, перейдите и отредактируйте my.cnf . Следующее установит всю цепочку в UTF-8:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .