1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Sql и русские буквы

Тема в разделе "Разработка плагинов для новичков", создана пользователем makkarpov, 17 май 2012.

  1. Автор темы
    makkarpov

    makkarpov Активный участник Пользователь

    Баллы:
    88
    Ситуация такова: есть плагин, записывающий данные в базу:
    Код:
        private Connection getConnection() {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                return DriverManager.getConnection("jdbc:mysql://"+dbHost+":"+dbPort+"/"+dbName+"?user="+dbUser+"&password="+dbPass);
            } catch (Exception e) {
                log.warning("Failed to initialize DB connection!");
                log.warning(e.getMessage());
                //e.printStackTrace();
            }
            return null;
        }
     
     
        public boolean putUserField(String name, String field, String value) {
            PreparedStatement st = null;
         
            boolean res = false;
         
            try {
                st = conn.prepareStatement("UPDATE "+dbTable+" SET "+field+"= ? WHERE username = ? AND scope = ?");
                st.setString(1, value); st.setString(2, name); st.setString(3, scope);
             
                if (st.executeUpdate() == 0) {
                    st.close();
                 
                    st = conn.prepareStatement("INSERT INTO "+dbTable+" (username, scope, "+field+") VALUES (?, ?, ?)");
                    st.setString(1, name); st.setString(2, scope);
                    st.executeUpdate();
                }
             
                st.close();
             
                res = true;
             
            } catch (Exception e) {
                log.warning(e.getMessage());
                e.printStackTrace();
            } finally {
                closeResources(conn, st, null);
            }
         
            return res; 
        }
    Но на руссих буквах база тупит. Кодировка базы - utf8_bin. Как исправить?

    P.S. Если записать в базу текст через PMA, то в игре все отлично отображается
     
    Оригинало_о нравится это.
  2. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    чётотипо Encoding.UTF8 добавь
    примерно


    Код:
    try {
    st = conn.prepareStatement("UPDATE "+dbTable+" SET "+field+"= ? WHERE username = ? AND scope = ?");
      st.setString(1, (value,  Encoding.UTF8 )); st.setString(2, (name,  Encoding.UTF8 )); st.setString(3, (scope,  Encoding.UTF8 ));
     
    if (st.executeUpdate() == 0) {
    st.close();
     
      st = conn.prepareStatement("INSERT INTO "+dbTable+" ((username, Encoding.UTF8), (scope,  Encoding.UTF8), "+field+") VALUES (?, ?, ?)");
      st.setString(1, (name,  Encoding.UTF8)); st.setString(2, (scope,  Encoding.UTF8 ));
    st.executeUpdate();
    }
     
  3. kireevm

    kireevm Старожил Пользователь

    Баллы:
    103
    Неа, компилятор ругаеться(
     
  4. Автор темы
    makkarpov

    makkarpov Активный участник Пользователь

    Баллы:
    88
    На такую херню компилятор ругается. Я пробовал конвертировать так:
    new String(str.getByteArray("CP1251"), "UTF-8")
     
  5. smilesdc

    smilesdc Няша Модератор

    Баллы:
    153
    Имя в Minecraft:
    smilesdc
    в базе укажите кодировку UTF8_general_ci.
     
  6. Автор темы
    makkarpov

    makkarpov Активный участник Пользователь

    Баллы:
    88
    @Epik_Fail, вот я смотрю твои последние ответы, и уже сомневаюсь, знаешь ли ты русский язык и не обезъяна ли ты часом
     

Поделиться этой страницей