Проблема турецкого символа при вставке в базу данных MySQL с переполнением стека

У меня проблемы со вставкой строк, включающих турецкие символы. Я пытаюсь вставить «öçşığüÖÇŞİĞÜ» как строку.

Я поместил указанную ниже строку в заголовок файла php:

header("Content-Type: text/html; charset=windows-1254");

Я получаю данные из ajax с (хотя это не важно, я пишу это)

$json = filter_input_array(INPUT_POST);

Вот команда вставки:

$query = "INSERT INTO users (name) VALUES ('" . $user->get_name() . "')";

Теперь я попробовал два случая присвоения значений переменным:

СЛУЧАЙ 1

  1. PHP: $ name = $ json [‘name’];
  2. браузер: Ã¶Ã§ÅŸÄ ± ğüÃ-A ‡ Aa ° ÄÃœ
  3. база данных: Ã§ÅŸÄ ± ğüÃ-A ‡ аза ° ĞÜ

ДЕЛО 2

  1. PHP: $ name = iconv («UTF-8», «ISO-8859-9», $ json [‘name’]);
  2. браузер: öçşığüÖÇŞİĞÜ 
  3. база данных: çþýðüÖÇÞÝÐÜ

«1» — мой тип присваивания строки, «2» — результат «echo $ user-> get_name ();» в зависимости от назначения на «1», а «3» — это значение в ячейке базы данных. Я могу получить истинный результат в «эхо» в случае 2, но поврежденный результат вставляется в базу данных. Моя сортировка БД: «utf8_turkish_ci».

(Php 5.4.17, MySQL 5.6.13)

0

Решение

эта проблема звучит так, как будто вы пропустили где-то указать кодировку символов. Чтобы решить эту проблему, просто убедитесь, что вы установили кодировку UTF-8 каждый (это на самом деле не должно быть UTF-8, просто тот же самый везде — но если вы что-то напутали и вам все равно нужно поменять некоторые места, я настоятельно рекомендую использовать utf-8):

  • скажи MySQL использовать utf-8. чтобы сделать это, добавьте это в ваш my.cnf:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • прежде чем взаимодействовать с mysql, отправьте эти два запроса:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    или, альтернативно, пусть php сделает это после открытия соединения:

    mysql_set_charset('utf8', $conn);
    
  • установите UTF-8 в качестве кодировки по умолчанию для вашей базы данных

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • сделать то же самое для таблиц:

    CREATE TABLE `my_table` (
    -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • предполагая, что клиент является браузером, используйте ваш контент как utf-8 и правильный заголовок:

    header('Content-type: text/html; charset=utf-8');
    

    чтобы быть уверенным, что браузер понимает, добавьте метатег:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • и, наконец, что не менее важно, скажите браузеру отправлять формы, используя utf-8

    <form accept-charset="utf-8" ...>
    

Или проверьте здесь вопрос улыбающегося. MYSQL — турецкий символ

2

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

Если вы используете utf-8, эта проблема не возникает.

Мое предложение — конвертировать кодировку в utf8.

2

Я думаю, что вы использовали UTF 8, пожалуйста, попробуйте

header('Content-Type: text/html; charset=utf-8');

в части MySQL вы должны использовать

mysql_query("set names 'utf8'");

пример php

<html>
<head>
<title>Title</title>
<meta charset="UTF-8" />
</head>
<body>
<?php
mysql_query("set names 'utf8'");
$sql = "select name from users";
//........
//........
//echo "abc";
?>

</body>
<html>
1

Вы должны добавить запрос MySQL перед любыми запросами к этой таблице:

SET NAMES 'utf8_turkish_ci' / SET NAMES 'ISO-8859-9'

или же

$params = [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'ISO-8859-9\'',
];
$pdo = new PDO($dsn, $username, $passwd, $params];

Не используйте iconv для этого.

1

Я решил только

  • удаление iconv () преобразований
  • замена предыдущего заголовка на «header (‘Content-Type: text / html; charset = utf-8’);» как указано выше другими членами.

большое спасибо.

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