Как хранить специальные символы в формате UTF-8 в базе данных

Я пытаюсь сохранить «£» в базе данных. Я также пометил это поле как utf8_general_ci в коллекции. Но это сохранить как . Я также установил UTF-8 в HTML-файл метатега. Чего здесь не хватает

——————РЕДАКТИРОВАТЬ————

Я проверил, что на этой странице есть один редактор (Rich Text). Если я использую этот редактор для сохранения данных, то он генерирует , но если я использую текстовое поле, то он работает нормально. Я не знаю, что не так в этом и как отладить эту проблему

$query = "insert into field_master set fk_t_id = '".$_POST['t_id']."', fk_g_id = '".$_POST['g_id']."', fk_f_id = '".$_POST['f_id_'.$inc_i.'_'.$inc_j]."'".$str.", field_value = '".$field_value."', field_required = '".$required."', fk_section_id = '".$_POST['section_id_'.$inc_i]."', section_order = '".$_POST['section_order_'.$inc_i]."', field_order = '".$_POST['temp_order_'.$inc_i.'_'.$inc_j]."'";
$smt = $class->dbh->prepare($query);
$smt->execute();

0

Решение

The examples shown here assume use of the utf8 character set and utf8_general_ci collation.

Specify character settings per database. To create a database such that its tables will use a given default character set and collation for data storage, use a CREATE DATABASE statement like this:

CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
Tables created in the database will use utf8 and utf8_general_ci by default for any character columns.

Applications that use the database should also configure their connection to the server each time they connect. This can be done by executing a SET NAMES 'utf8' statement after connecting. The statement can be used regardless of connection method: The mysql client, PHP scripts, and so forth.

In some cases, it may be possible to configure the connection to use the desired character set some other way. For example, for connections made using mysql, you can specify the --default-character-set=utf8 command-line option to achieve the same effect as SET NAMES 'utf8'.

If you change the default character set or collation for a database, stored routines that use the database defaults must be dropped and recreated so that they use the new defaults. (In a stored routine, variables with character data types use the database defaults if the character set or collation are not specified explicitly.

Specify character settings at server startup. To select a character set and collation at server startup, use the --character-set-server and --collation-server options. For example, to specify the options in an option file, include these lines:

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
These settings apply server-wide and apply as the defaults for databases created by any application, and for tables created in those databases.

I hope these information would be useful to you.
0

Другие решения

Вопросительный знак в черном бриллианте, когда вы действительно испортили использование utf8. Простой ответ заключается в том, чтобы все испортить, сказав (в HTML) <meta charset=ISO-8859-1> (псевдоним latin1).

Правильный ответ — использовать utf8 везде:

  • Символы в клиенте кодируются utf8.
  • Соединение utf8 — через выполнение SET NAMES utf8 или некоторый специфичный для языка синтаксис при подключении. (Увидеть ниже)
  • CHARACTER SET utf8 на столбце / таблице.
  • HTML: <meta charset=UTF-8>

В зависимости от того, кого вы нарушаете, происходят разные вещи.

Если этих заметок недостаточно для решения вашей проблемы, сделайте SELECT col, HEX(col) FROM ... чтобы увидеть, что на самом деле в таблице. За £, вы должны увидеть гекс C2A3, Если вы получаете C382C2A3, у вас есть проблема «двойного кодирования». Если вы видите (не hex) £, у вас есть проблема «Mojibake». Если ничего из вышеперечисленного, ну, это то, что делает проблемы с набором символов проблемой.

COLLATION (такие как utf8_general_ci) для сортировки; это не актуально в этом обсуждении, только CHARACTER SET (utf8 или utf8mb4) есть.

mysqli интерфейс: mysqli_set_charset('utf8');

PDO интерфейс: $db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);

0

По вопросам рекламы [email protected]