Кодировка БД при создании из скрипта

phpup

Новичок
Кодировка БД при создании из скрипта

PHP:
// connection to database
mysql_select_db($database, $conn)
  or $query = "create database $database";
$result = mysql_query($query)
          or die ("<p>Error: ".mysql_error());
Как можно задать кодировку для БД в utf8 ?
Это можно сделать модитфицировав этот код?

p.s: lighttpd, mysql последние.
 

zerkms

TDD infected
Команда форума
http://dev.mysql.com/doc/refman/5.1/en/create-database.html

Но следует понимать, что если для CREATE TABLE указана своя кодировка, то кодировка, указанная при создании базы учитываться не будет. Т.е. она является умолчальной для таблиц, в которых не была указана явно.

плюс читать о mysql_set_charset() (mysql >= 5.x) или SET NAMES (mysql < 5.x)
 

Фанат

oncle terrible
Команда форума
Довольно забавная обработка ошибок.
А с таблицами как?
 

phpup

Новичок
решение :

Найдены грабли - в debian/testing (и наверное не только) mysqld собран с default charset latin1, что приводит к потере данных при загрузке дампов в utf8 независимо от настроек конкретной базы.

Лекарство:

character_set_server = utf8
collation_server = utf8_general_ci

в разделе [mysqld] в /etc/mysql/my.cnf
 

zerkms

TDD infected
Команда форума
Это не решение, это, пардон - говна кусок.
Почему? Потому что твой скрипт теперь зависим очень сильно от настроек сервера, в отличие от моего решения.

Ну да ладно, я подсказал как делать правильно, а вы там уже сами думайте, взрослые ведь.
 

Фанат

oncle terrible
Команда форума
Причем решение, прямо противоположное по идеологии приведенному коду.
Если база создается АЖ НА ЛЕТУ, то кодировка почему-то - копанием в кишках сервера.
Смысл писать хитрожумные конструкции типа
or $query = "create database $database";
если все равно без ручных правок работать не будет.

кстати, что-то я пропустил.
а разве этот скрипт не вываливается каждый раз с ошибкой "Query was empty"?
 

zerkms

TDD infected
Команда форума
*****
и нотисом :) Но я не удивлюсь если там ещё какой-то хитрый костыль подставлен в виде $query = 'SELECT 1' перед этим кодом, чтобы всё было чотко )))))
 

phpup

Новичок
а разве этот скрипт не вываливается каждый раз с ошибкой "Query was empty"?

вываливается, а как исправить?
 

Фанат

oncle terrible
Команда форума
1. Создавать базу скриптом инсталляции.
2. При отсутствии базы просто падать. Для этого поменять этот код на
PHP:
if (!mysql_select_db($database, $conn) {
  header("503 Service Unavailable");
  exit;
}
 

phpup

Новичок
Спасибо)
Нужно было так писать:
PHP:
$query = "create database $database default character set = utf8";
 

phpup

Новичок
нет, пришлось подправить скрипт (спасибо тебе :) ).
теперь если БД при установке уже существует, то скрипт пишет что database is exist, а не "Query was empty".
 
Сверху