2016-02-03 4 views
0

Значение после этого символаНевозможно вставить некоторые специальные символы в mysql

Почему это происходит?

create table tmp2(t1 varchar(100)); 

insert into tmp2 values('beforeafter'); 

mysql> select * from tmp2; 
+--------+ 
| t1 | 
+--------+ 
| before | 
+--------+ 
1 row in set (0.01 sec) 

Я побежал затем команду и вернулся некоторой полезной информацией

mysql> SHOW FULL COLUMNS FROM tmp2; 
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
| Field | Type   | Collation  | Null | Key | Default | Extra | Privileges      | Comment | 
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
| t1 | varchar(100) | utf8_general_ci | YES |  | NULL |  | select,insert,update,references |   | 
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ 
1 row in set (0.00 sec) 

и это,

mysql> SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = "test" AND table_name = "tmp2" AND column_name = "t1"; 
+--------------------+ 
| character_set_name | 
+--------------------+ 
| utf8    | 
+--------------------+ 
1 row in set (0.00 sec) 

Im тестирования этого в командной строке убунта/MySQL.

+0

Наиболее вероятным объяснением поведения, которое вы наблюдаете, является * несоответствие * в наборе символов между клиентским приложением, MySQL erver и/или столбец. [joelonsoftware.com/articles/Unicode.html](http://joelonsoftware.com/articles/Unicode.html) и [kunststube.net/encoding/](http://kunststube.net/encoding). Справочное руководство по MySQL: [http://dev.mysql.com/doc/refman/5.6/en/charset.html](http://dev.mysql.com/doc/refman/5.6/en/charset.html) , Исправление может быть таким же простым, как 'SET имена 'utf8';' – spencer7593

+0

@ spencer7593 SET имена 'utf8'; не работал. – eerrzz

+0

Что такое символ столбца? Поскольку вы не указали его, он будет по умолчанию использоваться для таблицы. И поскольку это тоже не указано, оно будет по умолчанию для набора символов базы данных. И этот параметр мог быть по умолчанию для сервера MySQL. Я предполагаю, что клиент использует UTF-8, а строковое значение содержит допустимый символ UTF-8, который * не * действителен в наборе символов столбца. Но это всего лишь предположение. – spencer7593

ответ

1

Я нашел решение here

я узнал некоторые символы не входят в utf8

Существует хорошая статья here

мне нужно, чтобы изменить столбец utf8 в utf8mb4 и работал

alter table tmp2 modify t1 varchar(100) character set utf8mb4; 

SET NAMES utf8mb4; 

insert tmp2 values('beforeafter'); 
Смежные вопросы