|
|
|
| Есть такая таблица
CREATE TABLE `stud_group` (
`ent_year` year(4) NOT NULL,
`abbr` char(10) COLLATE utf8_bin NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
|
При запросе:
SELECT concat( abbr, ent_year )
FROM stud_group
|
выдет:
ГЊГЂ2007
Понимаю, что проблема в кодировке, потому что эта таблица изначально имела другую кодировку,
и все работало нормально:
CREATE TABLE `stud_group` (
`ent_year` year(4) NOT NULL,
`abbr` char(10) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
Как это исправить, подскажите, пожалуйста! | |
|
|
|
|
|
|
|
для: olejek
(27.02.2008 в 15:43)
| | Погодите... а данные перекодировке подверглись? Дело в том, что смена атрибута DEFAULT CHARSET не приводит к автоматической перекодировке данных. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2008 в 12:23)
| | Я сделал дамп базы данных
mysqldump -u root -p DB_NAME --allow-keywords --create-options --complete-insert --default-character-set=latin1 >db_dump.txt
|
А потом заменил в файле db_dump.txt
DEFAULT CHARSET=latin1на
DEFAULT CHARSET=utf8 COLLATE=utf8_bin | |
|
|
|
|
|
|
|
для: olejek
(03.03.2008 в 11:15)
| | 1) данные в файле db_dump.txt в какой кодировке оказались?
2) Вы дамп как разворачиваете (при помощи утилиты mysql)? | |
|
|
|
|
|
|
|
для: cheops
(03.03.2008 в 11:46)
| | Что-то я совсем запутался!
1) данные в файле оказались в latin1
2) да. | |
|
|
|
|
|
|
|
для: olejek
(03.03.2008 в 12:01)
| | Если не сложно прикрепите фрагмент SQL-дампа (содержащий русский текст) к сообщению в виде файла. | |
|
|
|
|
|
|
|
для: cheops
(04.03.2008 в 00:59)
| | Вот сделал дамп.
Попробуйте сделать такой запрос:
SELECT concat( abbr, ent_year ) FROM stud_group
|
У меня получается это:
ГЊГЂ2007
ГЊГЋ2006
ГЊГЋ2005
ГЊГЋ2004
Г’2006
Г’2007
|
| |
|
|
|
|
|
|
|
для: olejek
(04.03.2008 в 12:07)
| | Для того, чтобы данные легли в базу данных как utf8 в начале дампа пропишите строку
При этом атрибут CHARSET у таблиц оставьте utf8. | |
|
|
|
|
|
|
|
для: cheops
(04.03.2008 в 13:39)
| | Что-то не помогает. Я, конечно, могу решить проблему создав таблицы из дампа, а данные вставив непосредственно из pma. Но хотелось бы со всем этим разобраться, чтобы в следующий раз знать решение. | |
|
|
|
|
|
|
|
для: olejek
(04.03.2008 в 14:58)
| | Ура, я нашел решение!
С справочнике написано:
Returns the string that results from concatenating the arguments. May have one or more arguments. If all arguments are non-binary strings, the result is a non-binary string. If the arguments include any binary strings, the result is a binary string. A numeric argument is converted to its equivalent binary string form; if you want to avoid that, you can use an explicit type cast, as in this example:
SELECT CONCAT(CAST(int_col AS CHAR), char_col);
Мне надо было делать такой запрос:
SELECT CONCAT(abbr, CAST(ent_year as CHAR) from stud_group;
|
т.к первое поле имеет тип char, а второе - int. | |
|
|
|