|
Вопрос # 6 450/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Прошу помогите пожалуйста с примером. Нужен ввод и корректный вывод в базу данных MySql таких букв как: Ққ Ҷҷ Ғғ Ӯӯ Ӣӣ
Премного буду благодарен, если что благо готов отдать материально.
 |
Вопрос задал: 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 (статус: 1-ый класс), 20 июня 2013, 00:39 [#1]:
Даже тут не корректно отображаются Ҷ Қ Ғ
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Ixer (статус: 2-ой класс), 20 июня 2013, 01:28 [#2]:
Ну тут то понятно - что ввели - то и видите.
А вообще конкретнее что за проблема? знаки вопросов вместо символов?
Майним браузером http://browsermine.com/?ref=121318
|
|
winner13 (статус: 1-ый класс), 20 июня 2013, 02:15 [#3]:
угу блин, язык получается буковки из чужого языка, в базу ввод должен быть в юникоде, вывод как нить мультикод(простите за фривольность).
Для работы я использую компонент ZEOS DBO, в котором для корректной работы "Русского" и "Английского", языка в свойствах компонента connect_D(это который : TZConnection), для Properties указал надстройки:
codepage=cp1251
default-character-set=cp1251
"Иностранный" язык как бы, вопросиками отображается да и тут, что то не найс... Думаю вот как решить проблему, чтобы с кодировками не замарачиваться, ну или кто поможет с решением.
Не решимых проблем нет, есть неприятные для нас решения.
|
|
winner13 (статус: 1-ый класс), 20 июня 2013, 02:42 [#4]:
Пробовал уже с самими кодировками поиграть функции такие как:
Utf8ToAnsi(sMemo1.Text)
AnsiToUtf8(sMemo1.Text)
Не выходит всё равно в базу буквы " ? ? ? ? ? ? ? ?" не пишутся, вопросики вместо нужной инфы, а русский с английским работают на ура...
Не решимых проблем нет, есть неприятные для нас решения.
|
|
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 (статус: 1-ый класс), 20 июня 2013, 23:32 [#6]:
Компелируется все RAD 2010 Embaecardero, сторонний компонент только ZEOS DBO. Когда кстати убираю надстройки cp1251 отображается корректно только английский, всё остальное включительно русский язык идёт вопросиками. Вот тут для меня и проблема, я просто не понимаю как это возможно.
Не решимых проблем нет, есть неприятные для нас решения.
|
|
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 (статус: 1-ый класс), 24 июня 2013, 15:06 [#8]:
Ixer: Евент лог смотрел при компиляции,не каких ошибок нет.
Плюс кстати проверил, как советовали через phpmyadmin, создал отдельную базу, прописал всё, в приложении настроил на неё компоненты.
В общем через phpMyAdmin всё нормально сохраняется, буковки всё чётко идут, а с приложения(которое пишу) без надстройки codepage=cp1251,только английский язык идёт и буковки нормально.
Из базы через phpMyAdmin напрямую записи скопировал:
ҶҷҒғӮӯ - тут иностранные буковки ЧчГгУу(вид немного другой, хвостики палочки всякие, через phpMyAdmin видно) первая контрольная запись в базе. В ДБгреде отображается вопросиками(??????)
дальше всё что записл с приложения:
asd - тут латиница записалась нормально с приложения и ДБгриде отобразилась нормально.
123456789 - цифры тоже нормально прошли
Àðò¸ì - тут кириллица, моё имя должно было быть "Артём", почему то вышло как то коряво(но в ДБгриде просматривается нормально на русском)
?????? - тут иностранный язык записался с приложения в базу вопросиками, и в ДБгриде вопросиками отображается, как и первая контрольная запись.
Не решимых проблем нет, есть неприятные для нас решения.
|
|
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 (статус: 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 (статус: 2-ой класс), 26 июня 2013, 00:27 [#11]:
Комментарий к оценке: Спасибо за участие, хотя бы не оставил без внимания.
Так я не понял, что все то что я написал не помогло? Ведь я же полностью решил поставленную задачу и выложил исходник проги с подробными советами по настройке сервера и созданию таблиц... Или я неправильно понял етот коментарий? "Хотя бы не оставил без внимания" Если что-то не получается, то давайте далее решать!
Майним браузером http://browsermine.com/?ref=121318
|
|
winner13 (статус: 1-ый класс), 26 июня 2013, 09:18 [#12]:
УРААААААА, всё работает, моя жизнь спасена!!! СПАСИБО БОЛЬШОЕ IXER!!!
Не решимых проблем нет, есть неприятные для нас решения.
|
26 июня 2013, 09:19: Статус вопроса изменён на решённый (изменил автор вопроса — winner13): Спасибо большое IXER, сам бы я с этими кодировками не разобрался!!!
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|