2015-04-09 3 views
1

Я использую Navicat 11.0.8, и я пытаюсь вставить значения в таблицу с помощью запроса, но когда я пытаюсь вставить значения с запросом, это работает, но кодировка символов перепутана !Ошибка кодирования символов Navicat (MySQL)

Как вы можете видеть в моем коде, таблица «table», и я вставляю ID, VNUM и ИМЯ. VNUM - «体 字», а NAME - «Versão».

INSERT INTO table VALUES ('1', '体字', 'Versão'); 

Вместо того чтобы показывать «体 字» на VNUM и «Versão» на название, это показывает «ä½“ a-» и „Versa £ о“.

Это очень плохо для меня, потому что я пытаюсь вставить более 5000 строк с большим количеством информации.

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

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
&  
ALTER TABLE table CONVERT TO CHARACTER SET big5 COLLATE big5_chinese_ci; 
& 
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

Я также пытался удалить свою таблицу и создать новый с кодировкой символов уже UTF-8 и отправить значение ..

SET FOREIGN_KEY_CHECKS=0; 

DROP TABLE IF EXISTS `table`; 
CREATE TABLE `table` (
`vnum` int(11) unsigned NOT NULL default '0', 
`name` varbinary(200) NOT NULL default 'Noname', 
`locale_name` varbinary(24) NOT NULL default 'Noname', 
) ENGINE=MyISAM DEFAULT CHARSET=big5_chinese_ci; 

INSERT INTO `table` VALUES ('1', '体字', 'Versão'); 

Тем не менее шоу «ä½“ a-» и "Versa ео.

Если я отредактирую таблицу вручную, это будет правильно! Но я не буду редактировать 5000 строк ...

+0

Используете ли вы правильную кодировку для своего соединения? –

+0

Да, я попытался изменить запрос, и я изменил «Versão» на шестнадцатеричный код, и он сработал. Но для китайского персонажа нет работы. Показывает? ВСТАВИТЬ В СТОИМОСТЬ ЗНАЧЕНИЙ ('1', 0x3f3f, 0x56657273e36f); – bobi

ответ

1

it shows '体字' and 'Versão'. - Похоже, что у вас был SET NAMES latin1. Do

SET NAMES utf8; 

после подключения и до INSERTING. Это говорит mysqld, какую кодировку использует клиент.

Проверьте данные, хранящиеся при выполнении SELECT col, HEX(col) ... Глубину utf8 (или utf8mb4) для 体字 составляет E4BD93E5AD97. Интерпретируя те таких же байт как latin1 дает вам 体字;

utf8 может обрабатывать те, плюс ã; Я не знаю, может ли big5.

На самом деле, я предлагаю вам использовать utf8mb4 вместо utf8. Это на случай, если вы столкнетесь с некоторыми из 4-байтовых китайских иероглифов.

Если у вас есть latin1 столбцы, которые нуждаются в изменении в utf8mb4, see my blog, где обсуждается «2-шаговый ALTER», но с использованием BINARY или BLOB (не Big5) в качестве промежуточного продукта.

Смежные вопросы