2014-02-07 2 views
1

После импорта таблицы Excel, содержащей некоторые специальные символы (like carriage returns or line feeds) в строке заголовков, кажется, что утилита phpMyAdmin без проблем обработала эту ситуацию, вставив эти символы в имя поля.как удалить специальные символы из имени поля mysql

Проблемы возник позже, когда я пытался импортировать таблицу в другие среды/инструменты, такие как интеграторы данных и т.д. Например, столбец "Date Start" был импортирован в таблицу, как "Date\nStart" с питающей линией в середине.

Операция поле переименования через PhpMyAdmin терпит неудачу с этой ошибкой:

**\#1054 - Unknown column 'Date Start' in 'mytable'** 

Очевидный обходной путь будет редактировать исходный файл Excel вручную (удаление Л.Ф.), а затем импортируйте таблицу в MySql, как и раньше, но я 'm в положении необходимости обновления схемы при сохранении данных в таблице.

Далее я попытался это из панели SQL в PhpMyAdmin (банкноты с \ п в имени поля, VARCHAR (16) это всего лишь пример, DATETIME или INT должен работать, а):

ALTER TABLE mytable CHANGE `Date\nStart` `Date Start` VARCHAR(16) 

но это дает ошибку # 1054 - Неизвестный столбец «Дата \ nStart» в «туЬаЫе»

Я также проверил information_schema дб, но, как указано ниже @Steve, это только для чтения базы данных.

Я использую MySql 5.5.32 и phpMyAdmin 4.0.4.1 с рабочим столом Win7. Какие-либо предложения?

+0

Проверка таблицы INFORMATION_SCHEMA.COLUMNS с помощью SELECT HEX (COLUMN_NAME) FROM COLUMNS WHERE COLUMN_NAME LIKE '% \ n%' Я могу определить значение 0x0A в строке, на самом деле это LF, ascii-код 10 ... – ManuelJE

ответ

0

Я думал, ты не мог бы написать INFORMATION_SCHEMA из-за проблемами разрешения, но после прочтения MySQL Manual я понимаю, что это ожидаемое поведение как ручные состояния:

Although you can select INFORMATION_SCHEMA as the default database with a USE statement, you can only read the contents of tables, not perform INSERT, UPDATE, or DELETE operations on them.

Достигнуть таблицу переименования по используя команду RENAME TABLE, сначала запустите запрос выбора, чтобы найти все таблицы, которые нужно изменить, а затем переименуйте их, заменив возвращение битвы символом пробела.

Чтобы переименовать только столбец из таблицы в команду ALTER TABLE можно использовать с CHANGE COLUMN параметрами, например:

ALTER TABLE table_name CHANGE COLUMN 'Date\nStart' 'Date Start' DATETIME 

Я знаю, что вы уже сказали, что это команда, что вам нужно, так что я «Я проверил это сам, сначала выбрав таблицы, а затем запустив команду ALTER TABLE, и она отлично работала. Я использовал интерфейс командной строки, поэтому, возможно, проблема связана с phpMyAdmin - можете ли вы подтвердить, что это не кодирование или экранирование \ n?

Вот что я тестировал с помощью командной строки и работал OK:

SELECT COLUMN_NAME 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE TABLE_SCHEMA = 'test_345' 
AND TABLE_NAME LIKE '%\n%'; 
ALTER TABLE test_table1 CHANGE COLUMN 'Date\nStart' 'Date Start' DATETIME; 

Любой из них может быть обернуты в рутину, если вы думаете, что это будет полезно в будущем.

+0

Спасибо , Steve Да, это имеет смысл ... Даже корень следует избегать, чтобы запутаться. Но моя проблема остается. – ManuelJE

+0

проблема заключается в имени столбца, а не в именах таблиц. – ManuelJE

+0

Стив, мы подошли к различным аналогичным решениям. Но ваше предложение с '\ n' посередине (экранирование CR) не работало для меня, из командной строки. Ввод двух строк, с помощью ENTER вместо \ n, работал отлично, как это было на панели SQL инструмента php. Другие читатели должны обратить внимание на то, что первая строка заканчивается клавишей ENTER, а конечная ';' должен быть напечатан в конце второго. Если это работает из вашего CLI, я бы предположил, что что-то в моей текущей конфигурации отличается, в отношении escape-символов. Тем не менее, то, что он считает, является окончательным решением. Большое спасибо! – ManuelJE

0

Прежде всего, прочитав руководство MySql, вы можете оценить (или ненавидеть) исключительную гибкость, разрешенную правилами именования, подробные сведения о специальных символах, которые не разрешены в именах таблиц и столбцов, могут быть найдены в этом руководстве: https://dev.mysql.com/doc/refman/5.5/en/identifiers.html

После нескольких попыток побега символа CR, я нашел решение, которое работает на панели PhpMyAdmin SQL, я думаю, он должен работать на сессии командной строки, а также (не пробовал, что).

Если вы случайно создали или импортировали столбцы с именем CR, это можно исправить, введя ключ ENTER в имени столбца внутри оператора SQL ALTER TABLE (вы ДОЛЖНЫ вставлять имена в обратные ссылки для этого трюка работать).

Пример: Для того, чтобы заменить ненужный «Дата \ nStart» имя столбца с «дата начала» вы должны ввести это (пожалуйста, обратите внимание, что CR/Enter в конце первой строки!):

ALTER TABLE mybuggytable CHANGE `Date

Start` `Date Start` VARCHAR(16)

Как объяснялось выше, вы можете определить столбцы с CR, погруженные с этим утверждением:

USE INFORMATION_SCHEMA; SELECT * FROM COLUMNS WHERE COLUMN_NAME like '%\n%'

Я набрал команду ALTER TABLE в моей панели phpMyAdmin SQL, и она просто отлично работала.

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