IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Character set, MySQL (http://www.imho.ws/showthread.php?t=55645)

Конь в пальто 04.04.2004 17:12

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 в нотпаде, я таки увидел там русский текст. То есть, он туда записывается, но почему-то не показывается.

RaZEr 04.04.2004 17:49

Проверь стоит ли кодировка в которой ты делаешь insert'ы, кодировкой по умолчанию.

Конь в пальто 04.04.2004 21:23

Спасибо, не стояло.
Но на этом проблемы не кончились. Во-первых, почему-то не удаётся поставить по умолчанию на уровне сервера: при добавлении в 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? В документации сказано, что он должен понимать кодировку строк как установленную для соединения, если она устаноылена. В чём же дело, почему он не принимает?

RaZEr 04.04.2004 22:13

Значит не встала кодировка, раз префиксы нужны.

Конь в пальто 05.04.2004 01:00

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


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

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