2013-10-14 2 views
2

Я рассматриваю таблицу в MySQL, у которой есть странное имя столбца. Я хочу изменить имя столбца, чтобы не было странным. Я не могу понять, как это сделать.Имя столбца MySQL - странный символ - как его изменить?

Во-первых, если я сначала сделать

SET NAMES utf8; 
DESC `tblName`; 

я

| Ԫ       | varchar(255) | YES | MUL | NULL |    | 

Вместо этого делать

SET NAMES latin1; 
DESC `tblName`; 

Результаты в

| ?       | varchar(255) | YES | MUL | NULL |    | 

Достаточно честно - это заставляет меня думать, что имя столбца - это просто знак вопроса latin1. Но это утверждение не работает:

mysql> ALTER TABLE `tblName` CHANGE COLUMN `?` `newName` VARCHAR(255); 
ERROR 1054 (42S22): Unknown column '?' in 'tblName' 

Так что я пошел к столу information_schema некоторой информации:

mysql> SELECT column_name, HEX(column_name), ordinal_position FROM information_schema.columns WHERE table_schema = 'myschema' AND table_name = 'tblName' ; 
| ?       | D4AA             |    48 | 

Я смотрел эту шестигранную точку, и предполагая, я посмотрел его правильно (что может неправда), я определил, что этот персонаж «풪», который является «словом слога». Поэтому я попробовал это в заявлении об изменении таблицы безрезультатно:

ALTER TABLE `tblName` change column `풪` `newName` VARCHAR(255); 

Так вот, где я застрял.

+0

С чего вы работаете с клиентом mysql? Linux, Mac, Windows и т. Д.? –

+0

@AlastairMcCormack Сервер работает на Debian, и я запускаю клиент из Ubuntu. Итак, все это Linux. – buck

ответ

3

Я понял в способ сделать это (но интересно, если есть лучшее решение?)

Я сделал SHOW CREATE заявление:

mysql> SHOW CREATE TABLE `tblName`; 
... 
`Ԫ` varchar(255) DEFAULT NULL, 

Я смотрел на колонку в вопросе, который был напечатан странно (то, что вы видите выше, не совсем соответствует ему). Закрывающая задняя сторона не была видна. Но я выделил, что было видно и вклеивалось, что было в моем ALTER TABLE, и это окончательно устранило проблему.

+0

Да, используя идентификаторы с разделителями, это правильный способ справиться с этим. Я бы использовал метод copy & paste. –

2

Я считаю, что Ԫ (знак вопроса в коробке) на самом деле отображается, потому что ваша система не имеет шрифта в этой кодовой точке. Из вашего `hex (column_name) 'мы видим, что это значение xD4AA, которое является значением UTF-8. Это переводится в Unicode point 052a, для которого у меня нет шрифта на моем ящике Windows.

Установка символа, установленного на latin1, просто означает, что Mysql не смог перевести этот символ в значение latin1/cp1252, заменив его на «?». (xD4AA можно легко перевести на два символа cp1252, «Ôª». По какой-то причине Mysql не выбрал. Возможно, он знал исходную кодировку?)

Теперь, как переименовать столбец? Это должно быть так же просто, как вы говорите с ALTER TABLE CHANGE COLUMN и т. Д. Однако, похоже, что консоль Mysql не играет хорошо с символами не ASCII, особенно с символами переменной длины, найденными в UTF-8.

Решение состояло в том, чтобы передать SQL как аргумент mysql из Bash.Например, (убедитесь, что перевод терминала UTF-8 перед вставкой Ԫ):

mysql --default-character-set=utf8 -e "ALTER TABLE test change column Ԫ test varchar(255);" test 
Смежные вопросы