Всем доброго веремени суток, случилась такая проблема
есть машина linux, с локалью UTF-8 на ней крутится MySQL для программы SAMS, так вот я сделал бэкап базы средствами mysqldump затем скопироавл на другую машину (с UTF-8) и залил ее в новый mysql следующим образом: mysql -u root -p < mysqlbase
все было хорошо до тех пор пока я не залез в админку SAMS'а все что было на русском языке, стало каракулями. Так вот куда копать?
>Всем доброго веремени суток, случилась такая проблема
>есть машина linux, с локалью UTF-8 на ней крутится MySQL для программы
>SAMS, так вот я сделал бэкап базы средствами mysqldump затем скопироавл
>на другую машину (с UTF-8) и залил ее в новый mysql
>следующим образом: mysql -u root -p < mysqlbase
>все было хорошо до тех пор пока я не залез в админку
>SAMS'а все что было на русском языке, стало каракулями. Так вот
>куда копать?ну а сама база то в какой кодировке?
>ну а сама база то в какой кодировке?с mysql туго, если подскажите как узнать то напишу.
в my.cnf ничего по кодировкам не написано.
mysql -V выдает - mysql Ver 14.7 Distrib 4.1.20
>ну а сама база то в какой кодировке?на исходной машине я посмотрел через show variables; думаю что вы спрашивали об этом
| character_set_client | latin1 |
| character_set_connection | latin1
| character_set_database | latin1
| character_set_results | latin1
| character_set_server | latin1 |
| character_set_system | utf8на целевой та же команда показывает вот что
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8теперь что делать дальше?
делаю запрос к базе в полях где должны быть русскоязычные строки, просто серый фон, в одной ветке форума написано что база импортировалась не правильно, как можно ее экспортировать с определенной кодировкой?
>делаю запрос к базе в полях где должны быть русскоязычные строки, просто
>серый фон, в одной ветке форума написано что база импортировалась не
>правильно, как можно ее экспортировать с определенной кодировкой?mysqldump db_NAME --default_character_set=utf8 >> /db_NAME.sql
>mysqldump db_NAME --default_character_set=utf8 >> /db_NAME.sqlок. сейчас попробую
>
>>mysqldump db_NAME --default_character_set=utf8 >> /db_NAME.sql
>
>ок. сейчас попробуюПипл а какая связь ЛОКАЛИ с КОДИРОВКОЙ МУСКУЛА? )
>>
>>>mysqldump db_NAME --default_character_set=utf8 >> /db_NAME.sql
>>
>>ок. сейчас попробую
>
>Пипл а какая связь ЛОКАЛИ с КОДИРОВКОЙ МУСКУЛА? )хз. мне кажется что они как то взаимосвязаны, типа при установке мускул смотрит какая локаль и в соответствие с ней ставит для себя кодировку. или я не прав, образумьте
Нет. Локаль это локаль.
А кодировка в базах мускула - это другое.
В мускуле до 4.0 включительно дефолтная кодировка задавалась при компиляции либо в конфиге. Как правило для веб нужд cp1251.
Начиная с версии 4.1 появилась возможность указывать свою кодировку для баз, таблиц, столбцов. Также появились колейшены (сравнения), которые определяют как будут выполнятся операции сравнения над текстовыми данными.
Также надо принимать во внимание тот факт что при коннекте между клиентом и сервером может использоваться треть кодировка.
Поэтому чтобы у тя гарантированно сраслось и не пришлось плясать с подбором чарсета выгружай и загрузай базы с консоли с указанием конкретной кодировки.
> Как правило для веб нужд cp1251.Нужды бывают разные, у меня UTF8
>> Как правило для веб нужд cp1251.
>
>Нужды бывают разные, у меня UTF8Под веб чаще 1251 - ключевая фраза "как правило" )
>[оверквотинг удален]
>В мускуле до 4.0 включительно дефолтная кодировка задавалась при компиляции либо в
>конфиге. Как правило для веб нужд cp1251.
>Начиная с версии 4.1 появилась возможность указывать свою кодировку для баз, таблиц,
>столбцов. Также появились колейшены (сравнения), которые определяют как будут выполнятся операции
>сравнения над текстовыми данными.
>Также надо принимать во внимание тот факт что при коннекте между клиентом
>и сервером может использоваться треть кодировка.
>Поэтому чтобы у тя гарантированно сраслось и не пришлось плясать с подбором
>чарсета выгружай и загрузай базы с консоли с указанием конкретной кодировки.
>спасибо, за разъяснение.
на исходной машине я сейчас сделал так
mysqldump -u root -p --all --add-drop-table --all-databases --force --default_character_set=utf8 > mysqlbackup
на целевой запустил так
mysql -u root -p < mysqlbackup
все получится как надо или нет?:-)при импорте также можно указать параметр --default_character_set=utf8 ?
люди не получается. все равно при select * from table; вижу каракули. что я не сделал?
>люди не получается. все равно при select * from table; вижу каракули.
>что я не сделал?Версии покажи, покажи настройки (кодировки).
Кодировку баз покажи.
>Версии покажи, покажи настройки (кодировки).
>Кодировку баз покажи.исходный сервер:
mysql Ver 14.7 Distrib 4.1.20, for redhat-linux-gnu (i386) using readline 4.3
в my.cnf настройки кодировок не описаныэто кодировки баз?
character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ciцелевой сервер:
mysql Ver 14.12 Distrib 5.0.60, for pc-linux-gnu (i486) using readline 5.2
в my.cnf
[mysql]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[mysqldump]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8[myisamchk]
character-sets-dir=/usr/share/mysql/charsets[myisampack]
character-sets-dir=/usr/share/mysql/charsets[mysqld]
character-set-server = utf8
default-character-set = utf8
в mysql консоли show variables показывает следующуеcharacter_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci
выяснилось что в импортированную базу, на целевом сервере, невозможно внести строки с кириллицей.
Попробуй это
http://server-tuning.info/mysql/latin1-utf8.htmlУ тебя исходно latin1 а ты его в utf-8 импортируешь.
Если че мона попробовать на целевом серваке выставить latin1.
>Попробуй это
>http://server-tuning.info/mysql/latin1-utf8.html
>
>У тебя исходно latin1 а ты его в utf-8 импортируешь.
>Если че мона попробовать на целевом серваке выставить latin1.вобщем по статье все проделал, залил базу рускоязычные строки вобще исчезли, пустое место вместо них.
как можно выставить latin1 ?
>>Попробуй это
>>http://server-tuning.info/mysql/latin1-utf8.html
>>
>>У тебя исходно latin1 а ты его в utf-8 импортируешь.
>>Если че мона попробовать на целевом серваке выставить latin1.
>
>вобщем по статье все проделал, залил базу рускоязычные строки вобще исчезли, пустое
>место вместо них.
>как можно выставить latin1 ?при создании баз укажи
юзай phpmyadmin там все удобно и понятно
>Попробуй это
>http://server-tuning.info/mysql/latin1-utf8.html
>
>У тебя исходно latin1 а ты его в utf-8 импортируешь.
>Если че мона попробовать на целевом серваке выставить latin1.У меня отлично сработало. Переносил из cp1251 в latin1.
Спасибо.
>Так вот куда копать?Как обычно, в сторону документации, благо для мускула она очень подробная и написана читаемым языком. Не вижу смысла цитировать в этом топике куски из доки. Основное на что стоит обратить внимание:
1. Текущая локаль никак не связана с кодировкой базы
2. Кодировка соединения(то что вы наблюдаете в клиенте mysql или пых скриптах) почти не связана с кодировкой базы.
3. Нужно учитывать все уровни кодировки: база->таблица->поле
4. Есть разница между кодировкой базы и кодировкой данных. Вам ничто не помешает пихать данные в cp1251 в поля с кодировкой latin1, вот только при попытке их извлечь получите невменяемый дамп. Все возможности мускула по прозрачной перекодировке работают только если данные в базе соответствуют указанной кодировке. То есть например, если указана для поля(таблицы, базы) кодировка cp1251 и данные туда пихались в cp1251, то независимо от кодировки(например utf8 или koi8r) клиента(а mysql и mysqldump это тоже клиенты) вы увидите данные в нормальном виде(кроме неконвертируемых символов, например в koi8r нет некоторых кавычек).