| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Character set, MySQL
Помогите пожалуйста мне с роблемой.
У меня MySQL 4.1.0-alpha-max-nt, под WindowsXP. После установки я создал базу данных и таблицы (как понял позже) в чарсете latin1. При этом, русский текст успешно записывается в таблицы и успешно вытаскивается оттуда и показывается на РНР страницах в кодировке 1251. Но, при этом, сортировки совсем ни к чёрту. Я покопался в документации о чарсетах и колэйшонах, и понял, что мне нужны таблицы в чарсете cp1251, и что моя версия MySQL поддерживает возможность установки чарсета на уровне таблиц и полей. Я создал пробную таблицу с указанием чарсета cp1251 для таблицы и всех текстовых полей. Теперь, как бы я ни пытался занести в эту таблицу русский текст (простым инсертом из старой таблицы, инсертом с функцией convert(Name using cp1251), вручную через MySQL Control Center, через РНР), и как бы я ни пытался его оттуда получить (всеми теми же методами), я везде вижу знаки вопроса "?" вместо русских букв. Что я тут упустил? П.С. Открыв файл my_cp1251_table.MYD в нотпаде, я таки увидел там русский текст. То есть, он туда записывается, но почему-то не показывается. |
|
|
# 3 |
|
Guest
Сообщения: n/a
|
Спасибо, не стояло.
Но на этом проблемы не кончились. Во-первых, почему-то не удаётся поставить по умолчанию на уровне сервера: при добавлении в my.ini строки default-character-set=cp1251, при обращении к базе после перезапуска сервиса, пишет:File 'c:\mysql\share\charsets\?.conf' not found (Errcode: 22) Character set '#14' is not a compiled character set and is not specified in the 'c:\mysql\share\charsets\Index' file. Фйлов .conf действительно нет, но есть .xml, и в Index.xml файле указан cp1251. Но это пол беды. Допустим, я и не хочу менять это на уровне сервера, ведь я не смогу перелопатить все базы данных одномоментно. Я выяснил в документации, что можно устанавливать кодировку на уровне соединения, коммандой SET CHARACTER SET cp1251 или SET NAMES cp1251. Помогает! Стал видеть русские буквы из таблицы с кодировкой ср1251, и сортирует нормально, но (!) теперь перестал принимать любые строки в коммандах SQL. Например: SELECT Name from Member where Name like 'z%' - отвечает: ERROR 1210: Wrong arguments to like. При этом, помогает, если указать уодировку явно: SELECT Name from Member where Name like _ср1251'z%' Но, что же мне теперь, перепахивать весь код, приставлять ко всем строкам префикс _ср1251? В документации сказано, что он должен понимать кодировку строк как установленную для соединения, если она устаноылена. В чём же дело, почему он не принимает? |