Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определить кодировку базы и таблицы 
:(
    Опции темы
bars80080
Дата 21.5.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



что-то не могу найти в документации, как сделать выборку на кодировку CHARACTER SET и COLLATION для базы данных

т.е. увидеть я её могу 
Код

SHOW CREATE database `dbname`

но потом в php придётся парсить результаты из 
Код

CREATE DATABASE `dbname` /*!40100 DEFAULT CHARACTER SET cp1251 */
что не хотелось бы. тем более я не могу определить COLLATION отсюда

нет какого-нибудь select?

тож самое для таблицы
PM MAIL WWW   Вверх
skyboy
Дата 21.5.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



обрати внимание на таблицу information_schema.tables
там должна быть подобная информация.
PM MAIL   Вверх
bars80080
Дата 21.5.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



да, направление верное. только там таблицы, а для баз данных нужна таблица schemata

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

так что, если есть путь через свою базу, хотел бы услышать

Добавлено через 6 минут и 12 секунд
да, не дали доступа. надо как-то через своё пытаться
PM MAIL WWW   Вверх
skyboy
Дата 21.5.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(bars80080 @  21.5.2009,  14:24 Найти цитируемый пост)
это же другая база данных.

на всех используемых мной хостингах доступна.
это ж информационная БД, насколько мне известно, запись в её таблица совсем-совсем невомзожна. как и во view'хи.
так что твои слова о том, что у тебя к ней нет доступа, меня удивляют.
как же ПО для работы с БД будет получать список имеющихся таблиц, view, триггеров и процедур, если не через information_schema? 0_o
PM MAIL   Вверх
bars80080
Дата 21.5.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



хм, специально проверял. сейчас ещё раз попробую

Добавлено через 6 минут и 34 секунды
нету, посмотрел список баз - все что создавали только мы. не знаю, насколько это часто встречается, но раз есть такой случай, придётся работать без information_schema
PM MAIL WWW   Вверх
skyboy
Дата 21.5.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(bars80080 @  21.5.2009,  16:54 Найти цитируемый пост)
нету, посмотрел список баз - все что создавали только мы.

это в чем смотришь?
попробуй просто выполнить запрос:
Код

SELECT *
FROM information_schema.tables
LIMIT 1

PM MAIL   Вверх
bars80080
Дата 21.5.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



я пробовал выбрать эту базу mysql_select_db('information_schema') и затем show tables, а также просто из-под своей базы сделать show databases.
в первом случае выбрать базу не удавалось, соответственно ошибку выдавало, во втором случае показывались только те базы, которые мы сами создавали
PM MAIL WWW   Вверх
skyboy
Дата 21.5.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(skyboy @  21.5.2009,  15:16 Найти цитируемый пост)
будет получать список имеющихся таблиц

да, тут я погорячился. есть же show tables.
кстати, а версия mysql какая?
PM MAIL   Вверх
bars80080
Дата 21.5.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



сейчас не скажу, только завтра с работы. скорее всего 4-ая с чем-то

PM MAIL WWW   Вверх
lelik133
Дата 22.5.2009, 08:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



information_shema появилась только в 5-ой
PM ICQ   Вверх
bars80080
Дата 22.5.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



нет, ошибся

mysql
Client API version  5.1.16-beta  

это пхп 4.4.9, а апач 1.3.37
PM MAIL WWW   Вверх
Бонифаций
Дата 22.5.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Код

mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | latin1                           | 
| character_set_connection | latin1                           | 
| character_set_database   | latin1                           | 
| character_set_filesystem | binary                           | 
| character_set_results    | latin1                           | 
| character_set_server     | latin1                           | 
| character_set_system     | utf8                             | 
| character_sets_dir       | /opt/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------+
8 rows in set (0,00 sec)

mysql> show variables like '%coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci | 
| collation_database   | latin1_swedish_ci | 
| collation_server     | latin1_swedish_ci | 
+----------------------+-------------------+
3 rows in set (0,01 sec)





--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bars80080
Дата 22.5.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



так так, а это данные character_set_database, collation_database по текущей базе данных?
а по другой?
а по таблице как тогда узнать?

надо наверное сразу было задачу осветить



модуль по работе с БД. 
1. при выборе БД надо выставить определённый set names, соответствующий БД
2. при редактировании БД надо показать существующий character и collation для неё
3. то же самое по таблице, чтобы вносимые и корректируемые данные всегда находились в нужной кодировке (табличной)

если эти данные указывают только на текущие переменные, то вряд ли подойдёт, ведь set names надо принудительно выставлять

... надо подумать и потестить
PM MAIL WWW   Вверх
Бонифаций
Дата 22.5.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Цитата

при выборе БД надо выставить определённый set names, соответствующий БД


Нет. Вы не поняли. Set names нужно выставлять исходя из кодировки клиента, чтобы mysql знал во что конвертировать на лету данные из базы. 


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bars80080
Дата 22.5.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



интересно. т.е. один раз при подключении set names выставили в соответствии с 
Код
<?php
header('Content-Type: text/html; charset=cp1251');
/******************************************************************************/
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml " lang="en" xml:lang="en">
<head>
  <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
с клиентом, и всё? а дальше, если у нас база utf8, то она и будет сохранять данные в utf8 ?
PM MAIL WWW   Вверх
Бонифаций
Дата 22.5.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



именно. В этом и идея, чтоб клиенты от разных операционок, с разными локалями работали нормально с одной базой..


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bars80080
Дата 22.5.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



тааак, теперь такой вопрос

насколько помню, там можно установить для каждой базы, каждой таблицы и каждого поля свой character и collation
дать поля в форме под это дело не сложно, а вот при редактировании существующей базы/таблицы/поля, как узнать настройки?

show variables like '%char%' и show variables like '%coll%' я так понял дают возможно смотреть в текущем соединении. но это хватит только для базы, а как быть с таблицей?

show create table даёт максимум charset, и то только через распарсивание
PM MAIL WWW   Вверх
Бонифаций
Дата 22.5.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Это только через через information_schema

Код

mysql> select * from information_schema.columns where table_name = 'bb'\G
*************************** 1. row ***************************
           TABLE_CATALOG: NULL
            TABLE_SCHEMA: test
              TABLE_NAME: bb
             COLUMN_NAME: v
        ORDINAL_POSITION: 1
          COLUMN_DEFAULT: NULL
             IS_NULLABLE: YES
               DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 100
  CHARACTER_OCTET_LENGTH: 300
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      CHARACTER_SET_NAME: utf8
          COLLATION_NAME: utf8_general_ci
             COLUMN_TYPE: varchar(100)
              COLUMN_KEY: 
                   EXTRA: 
              PRIVILEGES: select,insert,update,references
          COLUMN_COMMENT: 
1 row in set (0,00 sec)

mysql> 




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bars80080
Дата 22.5.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



жаль, в данном случае это невозможно, эта база просто не определяется, хотя мускл 5.1.16


PM MAIL WWW   Вверх
bars80080
Дата 22.5.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



нет, определённо не позволяет. в слепую попробовал 

Код

select table_name FROM information_schema.tables WHERE table_schema = "mydb" ORDER BY table_name DESC


ответ 
Цитата

Access denied for user 'username'@'ip' to database 'information_schema'

PM MAIL WWW   Вверх
Бонифаций
Дата 24.5.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



ну и разрешите, все же в ваших руках. То что не дает всем-кому-угодно лазить по метаданным - это правильно.




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bars80080
Дата 24.5.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



Цитата(Бонифаций @  24.5.2009,  12:14 Найти цитируемый пост)
ну и разрешите, все же в ваших руках.

так хост-то не мой, удалённый. у себя то я всё прекрасно вижу
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1477 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.