2016-10-20 2 views
0

я провел весь день, пытаясь понять это, я надеюсь, что вы можете помочьУсеченный строка в тузд вставки

ПРОБЛЕМА: вставка «Cosio» в базе данных MySQL

, что происходит, что строка урезается на акценте так вставляет только «Cos»

если я следующее: echo mb_detect_encoding($_POS['name'], "auto"); это показать UTF-8

Чтение некоторого поста здесь и там я последовал некоторые советы апа d сделал следующий

mysql database : collation = utf8_general_ci 
mysql table: collation = utf8_general_ci 
mysql field: collation = utf8_general_ci 

Я использую CodeIgniter рамку и моя Conection базы данных является следующим:

$active_group = 'default'; 
$query_builder = TRUE; 

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'database' => 'codeigniter', 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => FALSE, 
    'db_debug' => (ENVIRONMENT !== 'production'), 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => false, 
    'failover' => array(), 
    'save_queries' => TRUE 
); 

на апаче конфигурацию я также добавил AddDefaultCharset utf-8

также объявил HTML тег <meta charset="UTF-8">

, и я прочитал и прочитал несколько сообщений SO, но без успеха. Что мне не хватает?

UPDATE: . Я приближаюсь к проблеме, прежде чем делать запрос на вставку. Я дезинфицирую все переменные post, как это.

$ready_for_insert = ucwords(strtolower(filter_var($_POST['name'], FILTER_SANITIZE_STRING))); 

, если я удаляю фильтр, дезинфицирующую строку, все работает хорошо. Я делаю это, чтобы очистить строку от любых тегов или ввода malicius. Я не знаю, удалю ли я его.

+1

Как о вашей связи DB? – tadman

+0

Вы также задали набор символов ваших столбцов? – chris85

+0

, так как я использую codeigniter my db conection char_set установлен в utf8, как вы можете видеть по приведенному выше коду. Я также добавил $ DB-> simple_query ('SET NAMES \' utf8 \ ''); по классу DB, но все равно он обрезает –

ответ

1

Полный Юникод не поддерживается кодировкой MySQL utf-8.

В вашем примере Cosío, í не поддерживается и должным образом закодирован перед сохранением в базе данных. Таким образом, символы после этого unicode удаляются MySQL. Только Cos будет сохранен в базе данных.

Если вы хотите поддержать полные юникоды, вы должны переключить кодировку utf8mb4

Это может быть сделано, как показано ниже.

Для каждой базы данных:

ALTER DATABASE CHARACTER SET database_name = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Для каждой таблицы:

ALTER TABLE имя_таблицы Преобразовать в CHARACTER SET utf8mb4 СОРТ- utf8mb4_unicode_ci;

Для каждого столбца:

ALTER TABLE имя_таблицы CHANGE имя_столбца имя_столбца УАКСНАК (191) CHARACTER SET utf8mb4 СОЪЪАТЕ utf8mb4_unicode_ci;

(Не слепо копировать-вставить это! Точная инструкция зависит от типа столбца, максимальной длины и других свойств.Выше линии является лишь примером для столбца VARCHAR.)

Пожалуйста, обратитесь this link для получения дополнительной информации