Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с русским: MySQL, RoR 
:(
    Опции темы
maep
Дата 3.10.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток, уважаемые участники

Есть следующая проблема.....
Грубо говоря, в базе - люди, на страничке - поиск.  В базу данные мигрируются с другой базы, Оракл.
Есть интерфейс для редактировнаия. Поиск - по фамилии. Фамилии написаны по-русски.

Если я через сайт редактирую запись и сохраняю - поиск работает. Если я ищу залитую скриптом запись - она не находится. Хотя, если найти ее же по номеру и вывести - отображается русский язык корректно! В MySQL Query Browser тоже корректно отображается.
Представить не могу, в чем проблема.

Кодировка базы - utf-8, это обозначено в database.yml, если потыкать свойства таблицы - это тоже видно.

Смущают две вещи: в скрипте заливки данных (не RoR, просто ruby, отдельное приложение)
я выполняю ch = my.prepare("SET CHARACTER SET UTF8") ch.execute, и проверяю кодировку
puts my.character_set_name. Странно то, что и до. и после выполнения команды она latin1. (Хотя если убрать этот запрос, то в базе иероглифы вместо букв). 

В общем, непонятно даже как проверить где именно косяк. По моему разумению, если буквы отображаются нормально - то и поиск должен идти, ан нет...

Помогите пожалуйста


-- Код заливки данных
Код

$KCODE = "utf8"  
ENV['LC_ALL'] = 'en_US'  
require 'oci8'
require "mysql"
require 'iconv'
            
cnt = 2
conn = OCI8.new('zh', 'dfdfsddsfdsf', 'bp_test3')
hostname= "localhost"
username= "root"
password= ""
database= "sonet"
my= Mysql.new(hostname, username, password, database)
st = my.prepare("insert into users (login,email,crypted_password, salt, state) values (?,'[email protected]', '649fde36cc7034e', '3d1e9c7d690c1057fa', 'passive')")
sel = my.prepare("select id from users where login = ?")
ia = my.prepare("insert into accounts (user_id, name1, name2, name3, city_id) values (?,?,?,?,1)")    
ic = Iconv.new('UTF-8', 'WINDOWS-1251')

puts my.character_set_name # Выводит latin1
ch = my.prepare("SET CHARACTER SET UTF8") 
ch.execute
puts my.character_set_name # что странно - опять вводит latin1

conn.exec('select pass_id, name1, name2, name3 from passport where pass_id > 0 and pass_id  < '+ cnt.to_s) do |r| 
  st.execute('login'+r[0].to_s)
  sel.execute('login'+r[0].to_s)
  uid = sel.fetch[0]
  ia.execute(uid,ic.iconv(r[1]), ic.iconv(r[2]), ic.iconv(r[3]))    
  puts ic.iconv(r[1])
end


Код представления

Код

<% form_tag :controller => :accounts, :action => :find do %>

<p>
<b>id</b><br />
  <%=text_field "conditions", "id" %>
</p>
<p>
<b>full_name (фамилия имя отчество)</b><br />
  <%=text_field "conditions", "full_name" %>
</p>

<%= submit_tag "yep"%>
<%end%>

<%if not @accounts.nil? and not get_account.nil?%>
<table>
  <tr>
    <th>id</th>
    <th>Name1</th>
    .....
  </tr>

<% for account in @accounts %>
  <tr>
    <td><%=h account.id %></td>
    <td><%=h account.name1 %></td>
....<% end %>
</table>
<%end%>


Код контроллера
Код

  def find
   
    unless params["conditions"].nil?
      cond = "1=1"
      cond+= " and id = " +  params["conditions"]["id"].to_s if not params["conditions"]["id"].empty?

      unless params["conditions"]["full_name"].empty?
        cond+= " and upper(concat(name3, name1, name2)) like upper(" + '\'' + params["conditions"]["full_name"].to_s.delete(' ') { |i|  } + '%' + '\')'
      end
      
      if cond != "1=1" 
      then
        @accounts = Account.find(:all, :conditions => cond)
      else  
        @accounts = [Account.find(:first, :conditions => cond)]
      end
    end
       
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @accounts }
    end
    
  end







PM MAIL   Вверх
Daevaorn
Дата 3.10.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Так нагло кросспостить не хорошо.
PM MAIL WWW   Вверх
maep
Дата 3.10.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну простите. Просто не факт что все люди посещают все форумы одновременно.
Нехорошо когда на одном форуме в разных разделах, а коли на форумах разных - дык не криминал имхо

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




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


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

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