PDA

Просмотр полной версии : UTF на выходе из MySQL


Смольный (Smolniy)
11.06.2005, 00:20
Вот у меня вопрос...
Поставил себе новый мускуль, раньше был очень уж старый.
И он выдает назад данные ТОЛЬКО в UTF. Например, phpmyadmin при выборе кодировки, показывает только UTF-овские.
Мои программы выводят ???????
Если программа при коннекте выполнит SQL-запрос
SET CHARACTER SET cp1251
то все возвращается как надо. Но это переделывать ВСЕ мои программы??? Хочу настроить что-либо в сервере... :(


My.ini
[client]
port=3306
default-character-set=cp1251

[mysqld]

port=3306
basedir="D:/www/MySQL/"
datadir="D:/www/MySQL/Data/"
default-character-set=cp1251

### мои бесплодные эксперименты, толку 0
#character-set-server=cp1251
#collation-server=cp1251_general_ci
default-collation=cp1251_general_ci
#init_connect="SET CHARACTER SET cp1251"
init-connect="SET NAMES 'cp1251';SET CHARACTER SET cp1251;"
###

character_sets-dir= D:/www/MySQL/share/charsets
default-storage-engine=INNODB
max_connections=100
query_cache_size=0
table_cache=256
tmp_table_size=5M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=8M
key_buffer_size=8M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=212K
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=10M
innodb_thread_concurrency=8


Мускуль 4.1.12a, php 5.0.4 (нареканий нет)

nagash
11.06.2005, 12:23
в 4.1 у каждой таблички своя кодировка может быть, задаётся во время CREATE TABLE
http://dev.mysql.com/doc/mysql/en/create-table.html
CHARACTER SET charset_name [COLLATE collation_name]

RFMitrio
15.06.2005, 20:43
+ скорее всего если при create database указать character set, таблицы по дефолту будут этот character set получать.

juggy
15.06.2005, 23:25
DEFAULT CHARSET надо наверное поставить на таблицу.
CREATE TABLE `sometable` (
`id` int(10) unsigned NOT NULL auto_increment,
`parent` int(10) unsigned NOT NULL default '0',
`title` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;

Ales
17.06.2005, 17:12
Смольный пишет:
Господа, я это знаю, проблема не в этом.
1. База зранит данные в 1251, это произошло хотя бы потому что я перенес данные из старой БД просто переписыванием папки data.
2. У меня баз штук 20 общей массой в гига полтора, если я буду пересоздавать таблицы и переливать данные, я умру. :)
3. База конвертирует данные туда-сюда без проблем, например если выполнить запрос SET CHARACTER SET cp1251 то она прекрасно отдает 1251, но я не хочу перелопачивать и дописывать все свои проги, и не могу дописать чуже проги (тот же phpmyadmin), форумы и прочую чепуху.

Собственно говоря, меня нимало не волнует, как он там их хранит у себя внутре, вопрос в том, что он _отдает_ данные в utf. Я сильно подозреваю, что если создать таблицу как вы пишете, то отдавать он все равно будет в utf, конвертируя (хотя это надо бы проверить; вечером смогу, я сейчас в Школе).

Штука в том что старенький мускуль работал без нареканий, новый выдает видимо какое-то умолчание, данные все те же. Не знает ли кто как это настраивается? Ведь попой же чувствую, что это какая-то настройка...
Если никто не подскажет именно настроечный вариант - значит буду либо программы колбасить, либо пересоздам таблицы как вы говорите, что ж остается делать... :(

nagash
17.06.2005, 17:20
запускать сервер с параметрами
--character-set-server=cp1251
--default-character-set=cp1251
или в my.cnf добавить
character-set-server = cp1251
default-character-set = cp1251
в раздел [mysqld]

styx
17.06.2005, 17:45
Что касается phpmyadmin - он, если видит MySQL 4.1+, всегда использует Unicode - это особенность именно phpmyadmin. Можно эту фичу в нём убрать, но не стоит :)