imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 04.04.2004, 17:12     # 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 в нотпаде, я таки увидел там русский текст. То есть, он туда записывается, но почему-то не показывается.
 
Старый 04.04.2004, 17:49     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Проверь стоит ли кодировка в которой ты делаешь insert'ы, кодировкой по умолчанию.
RaZEr вне форума  
Старый 04.04.2004, 21:23     # 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? В документации сказано, что он должен понимать кодировку строк как установленную для соединения, если она устаноылена. В чём же дело, почему он не принимает?
 
Старый 04.04.2004, 22:13     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Значит не встала кодировка, раз префиксы нужны.
RaZEr вне форума  
Старый 05.04.2004, 01:00     # 5
Конь в пальто
Guest
 
Сообщения: n/a

Заработало. Очень странно, но оказалось, что вроде решающим является кодировка базы данных. Именно она применяется при обработке строк. Когда я сделал другую базу данных, с указанием character set cp1251, то с ней всё встало на свои места.
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:50.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.