Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 450

/ вопрос решён /

Здравствуйте, уважаемые эксперты!

Прошу помогите пожалуйста с примером. Нужен ввод и корректный вывод в базу данных MySql таких букв как: Ққ Ҷҷ Ғғ Ӯӯ Ӣӣ

Премного буду благодарен, если что благо готов отдать материально.

winner13 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 20 июня 2013, 00:12
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Ixer

Здравствуйте, winner13!
И так - смотрим скрин и убеждаемся - все что находится в базе отображается так как это было введено:

https://dl.dropboxusercontent.com/u/5304135/6450.jpg

Первая строка (ключ 6) была введена с программы и являет собой эталонный тест (несколько арабских символов, несколько кириллических, несколько латинских , цифры и другие общие символы) - введенная с программы.

Вторая строка (ключ 5) - символы различного алфавитов введенные с программы.

Третья строка (ключ 4) - различные видоизменения буквы У взятые с разных алфавитов - введенная в phpMyAdmin.

Программа написана на основе переданных Вами исходников и компонентов ZEOS DBO 7.0.3-stable. Введены некоторые изменения. В частности:
1. Немного переработан код - на суть вопроса не влияет.
(Разве что принудительное переключение сервера на кодировку UTF-8):

procedure TForm1.FormCreate(Sender: TObject);
begin
//
ZConnection1.Connect;
ZQuery1.ExecSQL;
ZQuery1.SQL.Text:='select * from table1';
ZQuery1.ExecSQL;
ZQuery1.Active:=True;
end;
В ZQuery1.SQL изначально находится текст:
SET NAMES utf8
2. Изменены некоторые свойства компонентов ZConnection1. А именно (что касается вопроса):
Properties =
controls_cp=CP_UTF16
codepage=utf8
Также изменено начальное значение ZQuery1.SQL (см. выше).
3. Использовалась собственная конфигурация MySQL сервера версии 5.0. (Все настройки были указаны с учетом кодировки UTF-8.) Мой конфигурационный файл можете посмотреть здесь:

https://dl.dropboxusercontent.com/u/5304135/my.cnf

Внимание стоит обратить на :
[client]
default-character-set = utf8
 
[mysqld]
default-character-set = utf8
init-connect = "set names utf8"
skip-character-set-client-handshake

Запрос создания базы данных описан выше таблицу я изменял, поетому:

CREATE TABLE IF NOT EXISTS `table1` (
  `key` int(5) NOT NULL AUTO_INCREMENT,
  `user` varchar(50) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`key`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Ну и наконец, исходники модифицированной проги лежат здесь:

https://dl.dropboxusercontent.com/u/5304135/UTF-8_tj.7z

П.С. Все символы вставлялись (и в проге и в phpMyAdmin) путем копирования их из системной утилиты charmap.

П.П.С. Проект компилился в Delphi XE3 и исполнялся в Windows 7. Скомпиленый вариант проги не выкладывал, если понадобится - пишите.

Ответ отправил: Ixer (статус: 2-ой класс)
Время отправки: 25 июня 2013, 16:39
Оценка за ответ: 5

Комментарий к оценке: Спасибо за участие, хотя бы не оставил без внимания.

Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 26 июня 2013, 09:18; участников в обсуждении: 2.
winner13

winner13 (статус: 1-ый класс), 20 июня 2013, 00:39 [#1]:

Даже тут не корректно отображаются Ҷ Қ Ғ
Не решимых проблем нет, есть неприятные для нас решения.
Ixer

Ixer (статус: 2-ой класс), 20 июня 2013, 01:28 [#2]:

Ну тут то понятно - что ввели - то и видите.
А вообще конкретнее что за проблема? знаки вопросов вместо символов?
Майним браузером http://browsermine.com/?ref=121318
winner13

winner13 (статус: 1-ый класс), 20 июня 2013, 02:15 [#3]:

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

Для работы я использую компонент ZEOS DBO, в котором для корректной работы "Русского" и "Английского", языка в свойствах компонента connect_D(это который : TZConnection), для Properties указал надстройки:
codepage=cp1251
default-character-set=cp1251

"Иностранный" язык как бы, вопросиками отображается да и тут, что то не найс... Думаю вот как решить проблему, чтобы с кодировками не замарачиваться, ну или кто поможет с решением.
Не решимых проблем нет, есть неприятные для нас решения.
winner13

winner13 (статус: 1-ый класс), 20 июня 2013, 02:42 [#4]:

Пробовал уже с самими кодировками поиграть функции такие как:

Utf8ToAnsi(sMemo1.Text)
AnsiToUtf8(sMemo1.Text)

Не выходит всё равно в базу буквы " ? ? ? ? ? ? ? ?" не пишутся, вопросики вместо нужной инфы, а русский с английским работают на ура...
Не решимых проблем нет, есть неприятные для нас решения.
Ixer

Ixer (статус: 2-ой класс), 20 июня 2013, 14:28 [#5]:

codepage=cp1251
default-character-set=cp1251
cp1251 - одно байтовая кодировка, UTF мульти-байтовая. То что есть в UTF для cp1251 недостижимо - некоторых символов там просто нету. Вот они и заменяются чем-то (Когда квадратиками, когда вопросиками). Для того чтобы все работало нужно избавится от всех перекодировок. То есть везде должна идти работа с UTF-8. Причем приложение тоже должно быть юникодовским, для этого его следует скомпилировать в делфях 2009 и выше.
Майним браузером http://browsermine.com/?ref=121318
winner13

winner13 (статус: 1-ый класс), 20 июня 2013, 23:32 [#6]:

Компелируется все RAD 2010 Embaecardero, сторонний компонент только ZEOS DBO. Когда кстати убираю надстройки cp1251 отображается корректно только английский, всё остальное включительно русский язык идёт вопросиками. Вот тут для меня и проблема, я просто не понимаю как это возможно.
Не решимых проблем нет, есть неприятные для нас решения.
Ixer

Ixer (статус: 2-ой класс), 21 июня 2013, 16:07 [#7]:

А база в какой кодировке?

У меня когда то в PHP была подобная проблема: на локальной машине все работало норм, а на хостинге AJAX ответы приходили исковерканы. Оказалось Unix сервер кодировал все в KOI8-U а jQuery была уверена что это UTF-8 (точнее она только с UTF-8 работает) Вопрос решился переездом на другой хостинг (тогда просто не хотелось заморачиваться).

Что посоветую Вам:
1. Проверить нет ли при компиляции сообщений: W1057-W1064
W1057 Implicit string cast from '%s' to '%s' (Delphi)
W1058 Implicit string cast with potential data loss from '%s' to '%s' (Delphi)
W1059 Explicit string cast from '%s' to '%s' (Delphi)
W1060 Explicit string cast with potential data loss from '%s' to '%s' (Delphi)
W1062 Narrowing given wide string constant lost information (Delphi)
W1063 Widening given AnsiChar constant ('%s') to WideChar lost information (Delphi)
W1064 Widening given AnsiString constant lost information (Delphi)

http://docwiki.embarcadero.com/RADStudio/XE4/en/Error_and_Warning_Messages_(Delphi)_Index

2. Проверить сторонним инструментом (идеально - через phpMyAdmin) конфигурацию базы, и хранимые в ней данные, Попробовать записать символы в админе а прочитать прогой и наоборот. Это позволит выявить слабое звено.

3. Если ничего не удастся - попробовать как то кодировать вышеупомянутые символы.
Майним браузером http://browsermine.com/?ref=121318
winner13

winner13 (статус: 1-ый класс), 24 июня 2013, 15:06 [#8]:

Ixer: Евент лог смотрел при компиляции,не каких ошибок нет.

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

В общем через phpMyAdmin всё нормально сохраняется, буковки всё чётко идут, а с приложения(которое пишу) без надстройки codepage=cp1251,только английский язык идёт и буковки нормально.

Из базы через phpMyAdmin напрямую записи скопировал:

ҶҷҒғӮӯ - тут иностранные буковки ЧчГгУу(вид немного другой, хвостики палочки всякие, через phpMyAdmin видно) первая контрольная запись в базе. В ДБгреде отображается вопросиками(??????)

дальше всё что записл с приложения:

asd - тут латиница записалась нормально с приложения и ДБгриде отобразилась нормально.
123456789 - цифры тоже нормально прошли
Àðò¸ì - тут кириллица, моё имя должно было быть "Артём", почему то вышло как то коряво(но в ДБгриде просматривается нормально на русском)
?????? - тут иностранный язык записался с приложения в базу вопросиками, и в ДБгриде вопросиками отображается, как и первая контрольная запись.
Не решимых проблем нет, есть неприятные для нас решения.
Ixer

Ixer (статус: 2-ой класс), 24 июня 2013, 18:01 [#9]:

Ем-м-м-м... Попробую разобраться со сказанным выше...

Итак Создали вы в phpMyAdmin базу таким вот (к примеру) запросом:
CREATE DATABASE  `tereteretest` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Далее создали таблицу:

CREATE TABLE  `table1` (
 `key` INT( 5 ) NOT NULL AUTO_INCREMENT,
 `user` TINYTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
PRIMARY KEY (  `key` )
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Теперь делаете запрос в phpmyadmin и в проге:
INSERT INTO  `table1` (  `key` ,  `user` ) 
VALUES (
 '',  "ýŶŷŸƴƳƔȲȳɣɤ"
)

Что видишь в phpMyAdmin? Символы... (Вставлял с charmap - ибо по коду ставится что-то совсем другое, типа псевдографики). Проги у меня твоей нет, свою сейчас не напишу - нет либ для доступа к MySQL.

Кстати учти, что phpMyAdmin должен быть настроен на отображение в UTF-8 (В 2.6.1 это Languge и сопоставление справа на главной странице).

Кроме того: Если с базой работает только ета прога - то можно хранить в базе ети символы как коды (которые ты приводил здесь на сайте) а в самой проге выводить их как символы (также как ето делается в браузерах)...

Тут же у меня возникает вопрос... А вообще в проге ети символы где-то отображаются? Может мы не над тем бъемся?
Майним браузером http://browsermine.com/?ref=121318
winner13

winner13 (статус: 1-ый класс), 25 июня 2013, 01:31 [#10]:

Что-то мне подсказывает, что лучше для тех кто зайдёт сюда, поделится сорцами, авось кому полезно будет. Да и пример хороший и простой, как с базой данных работать через сторонний компонент ZEOS DBO.

Ixer: Всё сделал почти как вы прописали, вышло то же самое, что и в первоначальной таблице. В phpMyAdmin вижу символы всё как нужно, как нужно они отображаются, без всяких кодов как тут, либо символы либо вопросики.

Отображаются они в DBGrid-e, прям из базы.

Прилагаю архив с исходниками : http://zalil.ru/34603674 (UTF-8_tj.7z)
Размер: 748 КБ
Содержание:
Project1.dpr
Project1.dproj
Project1.exe
Project1.res
test.sql
Unit1.dcu
Unit1.dfm
Unit1.pas

Надеюсь так будет яснее чем тысяча глупых слов от меня. Очень надеюсь на вашу помощь.

P.s. В соурсе используется сторонний компонент ZEOS DBO который можно скачать тут: http://sourceforge.net/projects/zeoslib/
Не решимых проблем нет, есть неприятные для нас решения.
Ixer

Ixer (статус: 2-ой класс), 26 июня 2013, 00:27 [#11]:

Комментарий к оценке: Спасибо за участие, хотя бы не оставил без внимания.

Так я не понял, что все то что я написал не помогло? Ведь я же полностью решил поставленную задачу и выложил исходник проги с подробными советами по настройке сервера и созданию таблиц... Или я неправильно понял етот коментарий? "Хотя бы не оставил без внимания" Если что-то не получается, то давайте далее решать!
Майним браузером http://browsermine.com/?ref=121318
winner13

winner13 (статус: 1-ый класс), 26 июня 2013, 09:18 [#12]:

УРААААААА, всё работает, моя жизнь спасена!!! СПАСИБО БОЛЬШОЕ IXER!!!
Не решимых проблем нет, есть неприятные для нас решения.

26 июня 2013, 09:19: Статус вопроса изменён на решённый (изменил автор вопроса — winner13): Спасибо большое IXER, сам бы я с этими кодировками не разобрался!!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.05 сек.