Кодировка MySQL по-умолчанию. Как сменить?

Тема в разделе "Актуально, только не в тему", создана пользователем Fanamura, 21.01.2009.

  1. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 094
    Симпатии:
    158
    Пол:
    Мужской
    Есть: VPS от Агавы. Сервер: Линукс
    5 Мускл.

    В phpmyadmin отображается:
    MySQL-кодировка: UTF-8 Unicode (utf8)
    Сами БД созданы в cp1251, сопоставление тоже.

    результат SHOW VARIABLES LIKE 'cha%';
    Код (CODE):
    1. Variable_name   Value
    2. character_set_client    utf8
    3. character_set_connection    cp1251
    4. character_set_database  cp1251
    5. character_set_filesystem    binary
    6. character_set_results   utf8
    7. character_set_server    cp1251
    8. character_set_system    utf8
    9. character_sets_dir  /usr/share/mysql/charsets/


    Проблема:
    Сторонний скрипт заносит данные в Джумлу в юникоде, т.е. получаем вопросы ??? ?????? ???? и т.д.

    Как решить?

    Правил my.cnf
    везде где только можно проставил cp1251
    Код (CODE):
    1. [client]
    2. #password                   = your_password
    3. port                        = 3306
    4. socket                      = /var/lib/mysql/mysql.sock
    5. default-character-set = cp1251
    6.  
    7. [mysql]
    8. character-sets-dir=/usr/share/mysql/charsets
    9. default-character-set=cp1251
    10.  
    11. [mysqladmin]
    12. character-sets-dir=/usr/share/mysql/charsets
    13. default-character-set=cp1251
    14.  
    15. [mysqlcheck]
    16. character-sets-dir=/usr/share/mysql/charsets
    17. default-character-set=ucp1251
    18.  
    19. [mysqldump]
    20. character-sets-dir=/usr/share/mysql/charsets
    21. default-character-set=cp1251
    22.  
    23. [mysqlimport]
    24. character-sets-dir=/usr/share/mysql/charsets
    25. default-character-set=cp1251
    26.  
    27. [mysqlshow]
    28. character-sets-dir=/usr/share/mysql/charsets
    29. default-character-set=cp1251
    30.  
    31. [myisamchk]
    32. character-sets-dir=/usr/share/mysql/charsets
    33.  
    34. [myisampack]
    35. character-sets-dir=/usr/share/mysql/charsets
    36.  
    37. # use [safe_mysqld] with mysql-3
    38. [mysqld_safe]
    39. err-log                     = /var/log/mysqld.log
    40.  
    41. # add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations
    42. [mysqld]
    43. character-set-server        = cp1251
    44. default-character-set       = cp1251
    45. user                        = mysql
    46. port                        = 3306
    47. socket                      = /var/lib/mysql/mysql.sock
    48. pid-file                    = /var/run/mysqld/mysqld.pid
    49. log-error                   = /var/log/mysqld.log
    50. basedir                     = /usr
    51. datadir                     = /var/lib/mysql
    52.  
    53. skip-bdb
    54. skip-innodb
    55. skip-locking
    56. skip-ndbcluster
    57. skip-networking
    58. #bind-address               = 127.0.0.1
    59.  
    60. key_buffer                  = 32M
    61.  
    62. sort_buffer_size            = 2M
    63. read_buffer_size            = 128K
    64. read_rnd_buffer_size        = 256K
    65. join_buffer_size            = 128K
    66.  
    67. language                    = /usr/share/mysql/russian
    68.  
    69. max_connections             = 128
    70. max_user_connections        = 64
    71. net_buffer_length           = 16K
    72. max_allowed_packet          = 8M
    73. table_cache                 = 256
    74. max_connect_errors          = 1024
    75.  
    76. max_tmp_tables              = 32
    77. tmp_table_size              = 32M
    78.  
    79. query_cache_size            = 4M
    80. query_cache_type            = 1
    81.  
    82. thread_cache                = 2
    83. thread_concurrency          = 2
    84. thread_stack                = 196K
    85.  
    86. # uncomment the next directive for windows-1251 sites
    87. #init_connect               = 'SET NAMES cp1251'
    88.  
    89. [mysqldump]
    90. quick
    91. max_allowed_packet          = 8M
    92.  
    93. [mysql]
    94. # uncomment the next directive if you are not familiar with SQL
    95. #safe-updates
    96.  
    97. [isamchk]
    98. key_buffer                  = 32M
    99. sort_buffer_size            = 4M
    100. read_buffer                 = 512K
    101. write_buffer                = 512K
    102.  
    103. [myisamchk]
    104. key_buffer                  = 32M
    105. sort_buffer_size            = 4M
    106. read_buffer                 = 512K
    107. write_buffer                = 512K
    108.  
    109. [mysqlhotcopy]
    110. interactive-timeout


    Подскажите, а? Гугление ниего не принесло, а тут все свои :)
     
  2.  
  3. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 094
    Симпатии:
    158
    Пол:
    Мужской
    Ничего не понимаю, магия какая-то :) Три дня боролся, запостил сюда проблему, почти сразу проблема решил :) Такое уже не в первый раз:)
    Вообщем решение такое:
    после
    mysql_connect(бла бла бла);
    нужно прописать:
    mysql_query ('SET NAMES cp1251');
    mysql_query ('SET CHARACTER SET cp1251');

    Все работает :)
     
  4. Offline

    zzzerocoolll Пользователь

    Регистрация:
    04.06.2009
    Сообщения:
    41
    Симпатии:
    0
    Пол:
    Мужской
    А ещё поподробней можно? такая же проблема...
     
  5. Offline

    Sergi00 Недавно здесь

    Регистрация:
    06.03.2010
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Fanamura

    Спасибо тебе огромное!!! Я сегодня весь день про..бся с этим проклятым мускулом. И это единственное что помогло.

    Для всех остальных поясню детальнее как справиться с этой проблемой.
    Во-первых: возникает она от того, что "по умолчанию MySQL-сервер" устанавливается в кодировке latin1 , - именно эта настройка и является основным нашим врагом и "производителем" знаков вопросиков "?????? ???????? ??????????". Естественно изменить данную настройку пользователь хостинга не может - у него нет прав на создание БД собственным SQL-скриптом, БД создается панелью управления хостинга, которая оставляет кодировку по умолчанию, что и приводит к дальнейшему распространению действия latin1 на вложенные объекты.

    Решение:
    после танцев с бубном до умопомрачения оно всё-же было найдено двумя постами выше... но тут небольшое уточнение: нам надо как раз найти этот
    Сразу оговорюсь, у меня проблема была не c Джумлой а с совсем другим скриптом, но суть излечения одна Итак:
    1. С помошью виндовского поиска, или программы Text Replacer, либо любой другой проги, способной искать текст в каталоге, ищем текст "mysql_connect" (для этого просто натравливаем прогу на каталог с нужным скриптом). Когда мы находим необходимый файл, прступаем к п.2
    2. Мы нашли путь к файлу, теперь открываем его Блокнотом нажимаем ctrr-a и снова ищем "mysql_connect". и находим строчку примерно такого содержания:

    Код (PHP):
    1. mysql_connect(DB_HOST,DB_USER,DB_PWD);

    после неё вставляем

    Код (PHP):
    1. mysql_query ('SET NAMES cp1251');
    2. mysql_query ('SET CHARACTER SET cp1251');

    сохраняем файл
    3. Заливаем на сервер
    4. Открываем нашу веб-страницу. (если не помогло-нажимаем F5)

    После этих действий я запрыгал до потолка от радости, чего и вам желаю... только потолок не пробейте )))
     

Поделиться этой страницей

Загрузка...