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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL utf8 проблемы, вопрос про кодировки 
:(
    Опции темы
Royan
  Дата 2.2.2009, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

Репутация: нет
Всего: 15



Вопрос: Если у меня MySQL (v. 5.0.45) сконфигурирована вот так:
Цитата

mysql> status;
--------------
<path>\mysql.exe  Ver 14.12 Distrib 5.0.45, for Win32 (ia32)

Connection id:          43
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.0.45-community-nt MySQL Community Edition (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:   latin1
Db     characterset:   latin1
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Uptime:                 1 day 13 hours 47 min 18 sec




А таблицу я создаю вот так:
Код

CREATE TABLE `T_SECTION` (
  `uid` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` char(64) NOT NULL,
  PRIMARY KEY(`uid`)
)
ENGINE=MYISAM
ROW_FORMAT=default
CHARACTER SET utf8 ;


То у меня записи в таблице будут храниться в кодировке latin1 или utf8?

Проблема:
Я делаю insert:
Код

INSERT INTO t_section (name) VALUES ("Текст"), ("Текст Два"), ("Текст Три");

Сам файл SQL с INSERT'ом в кодировке utf8 на 100%, когда же я делаю SELECT * FROM t_section; получаю одни вопросики вместо слов, вот и сижу ломаю голову smile, где напутано  

Это сообщение отредактировал(а) Royan - 2.2.2009, 02:12


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
unicross
Дата 2.2.2009, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 53



Попробуйте вставить строку сразу после подключения к базе данных в скрипте
Код

mysql_query('SET NAMES utf8');

Если вы работаете в консоли, то там кодировка cp866. Чтобы увидеть русские буквы наберите
Код

SET NAMES cp866;
SELECT * FROM t_section;

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


Dreamer
***


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

Репутация: нет
Всего: 15



Делаю так (SQL код выполняется из под SQL редактора Zend Studio):

Код

USE db_foo;

SET NAMES 'utf8';
DROP TABLE IF EXISTS `T_TEST`;

CREATE TABLE `T_TEST` (
  `name` char(64) NOT NULL
)
ENGINE=MYISAM
ROW_FORMAT=default
CHARACTER SET utf8 ;

INSERT INTO t_test VALUES ("Раз"), ("Два"),("Три");


Выполняю следующий запрос из консоли MySQL:

Код

SELECT * FROM t_test;

Получаю выхлоп:
Код

mysql> SELECT * FROM t_test;
+------+
| name |
+------+
| ???  |
| ???  |
| ???  |
+------+
3 rows in set (0.00 sec)


Если выполнить INSERT из консоли MySQL, то как указал unicross данные записываются в кодировке cp866, а мне нужно именно utf8

Пробовал полечить проблему так. Из консоли выполняю:
Цитата

mysql> SET NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t_test(name) VALUES ('Раз');
ERROR 1366 (HY000): Incorrect string value: '\x90\xA0\xA7' for column 'name' at row 1



Такой вариант, та же ошибка:
Код

INSERT INTO t_test(name) VALUES (_utf8'Раз');


Что делать и что случилось просто ума не приложу????  smile 


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
unicross
Дата 4.2.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 53



Цитата

то как указал unicross данные записываются в кодировке cp866, а мне нужно именно utf8

Я не говорил, что данные будут записываться в cp866!!! Я говорил, что консоль работает с этой кодировкой. Данные при вставке будут перекодированы в utf8, так как при создании базы данных вы указываете именно эту кодировку по умолчанию.

Выполняю в консоли:
Код

use test2;
SET NAMES cp866;
DROP TABLE IF EXISTS `T_TEST`;
CREATE TABLE `T_TEST` (
`name` char(64) NOT NULL
)
ENGINE=MYISAM
ROW_FORMAT=default
CHARACTER SET utf8 ;
INSERT INTO t_test VALUES ("Раз"), ("Два"),("Три");
SELECT * FROM t_test;


Вывод

Код

mysql> use test2;
Database changed
mysql> SET NAMES cp866;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS `T_TEST`;
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE `T_TEST` (
    -> `name` char(64) NOT NULL
    -> )
    -> ENGINE=MYISAM
    -> ROW_FORMAT=default
    -> CHARACTER SET utf8 ;
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO t_test VALUES ("Раз"), ("Два"),("Три");
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t_test;
+------+
| name |
+------+
| Раз     |
| Два     |
| Три     |
+------+
3 rows in set (0.00 sec)


Вывод структуры базы данных

Код

--
-- Структура таблицы `t_test`
--

CREATE TABLE IF NOT EXISTS `t_test` (
  `name` char(64) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `t_test`
--

INSERT INTO `t_test` (`name`) VALUES
('Раз'),
('Два'),
('Три');


Если хотите полноценно работать с кодировкой UTF-8, то вместо консоли используйте phpMyAdmin.


Это сообщение отредактировал(а) unicross - 4.2.2009, 00:02
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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