SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.05.2009 20:35:20

dima_mak
Участник
Зарегистрирован: 07.05.2009
Сообщений: 2

иврит в Mysql

у меня есть база товаров с описание на иврите и скипт добавления продукта на РНР.
Сейчас при добавлении нового товара его описание кодируется в АНСИ и получается типа - "&#1493&#1512&#1502ו" хотя у таблицы поставлено сравнение на иврит и при добавлении стоит "SET NAMES hebrew". как мне сделать, что бы иврит показывался как есть и перекодировать, то, что уже добавлено?

Неактивен

 

#2 07.05.2009 22:25:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: иврит в Mysql

MySQL не кодирует данные такими последовательностями, это делает какая-то из Ваших клиентских
программ (скрипт на php или что-то еще?).

Задач у Вас две:
1. Сделать так, чтобы в таблицу влезали символы. Для этого нужно убедиться, что таблицы (все) в
соответствующей кодировке. Преобразовать таблицу в кодировку hebrew можно командой
ALTER TABLE tablename CONVERT TO CHARSET hebrew.

Возможно также стоит задуматься о том, чтобы хранить данные в utf8 — тогда можно будет хранить
слова и из других языков.

2. Перекодировать строки вида &#1493&#1512&#1502. Эта задача немного сложнее, т.к. одним
MySQL тут не обойдешься. По хорошему надо пройтись по всем табличкам скриптом (может быть, на
том же PHP) и сделать соответствующие замены.

Как вариант — если можете остановить базу на некоторое время — можно сделать полный бэкап
так, чтобы получился текстовый файл, потом пройтись по нему скриптом и загрузить уже измененные
данные обратно в MySQL.

P.S. Если получится сейчас сходу написать скрипт какой-нибудь простенький, то выложу smile

Неактивен

 

#3 07.05.2009 22:31:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: иврит в Mysql

Код:

aquatica:~/PERL$ cat decode.pl 
#! /usr/bin/perl

use strict;
use utf8;
use HTML::Entities;
use Encode;

while (my $a = decode('UTF-8', <>)) {
    chomp ($a);
    decode_entities($a);
    print (encode('UTF-8', $a) . "\n");
}
aquatica:~/PERL$ echo "&#1493&#1512&#1502ו" | perl decode.pl
ורמו

Выглядит как иврит. Осмысленно ли это — не знаю smile

Запускать можно и как «perl decode.pl filename.sql > converted.sql» — над бэкапом базы.

Неактивен

 

#4 08.05.2009 13:09:43

dima_mak
Участник
Зарегистрирован: 07.05.2009
Сообщений: 2

Re: иврит в Mysql

спасибо. мне уже подсказали путь полегче - использовать функцию РНР html_entity_decode при выводе из БД, она преобразовывает Юникод в буквы.

Неактивен

 

#5 08.05.2009 13:25:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: иврит в Mysql

Хранить в базе по 6 байт на символ — это круто smile Подумайте еще раз перед тем, как делать
полегче. Возможно, сделать правильно — лучше. Хоть и сложнее.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson