Исключение синтаксической ошибки MySQL Clojure («[...] рядом с« ???????????????? '[...] ») - PullRequest
3 голосов
/ 30 января 2010

У меня проблемы с выполнением каких-либо действий с clojure.contrib.sql, кроме установления соединения.

У меня mysqld работает на localhost: 3306 с базой данных под названием clj_db. Пользователь 'clj_user' @ 'localhost' с паролем 'clj_pass' может получить доступ к этой базе данных.

При попытке "выбрать * из clj_table" я получаю "com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии сервера MySQL для использовать рядом с «????????????????» в строке 1 ".

Что я делаю не так?

clj_db. clj_table

CREATE TABLE `clj_table` (
  `col_one` int(11) NOT NULL,
  `col_two` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

mysql_test.clj

(ns test.mysql
    (:use clojure.contrib.sql)
)

(def db-settings
    {:classname "com.mysql.jdbc.Driver"
    :subprotocol "mysql"
    :subname "//localhost:3306/clj_db"
    :user "clj_user"
    :password "clj_pass"})

(with-connection db-settings
    (with-query-results rs ["select * from clj_table"]
        (dorun (map #(println (:col_one :col_two %)) rs))
    ))

выход

Exception in thread "main" com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1 (mysql_test.clj:0)
   at clojure.lang.Compiler.eval(Compiler.java:4658)
   at clojure.lang.Compiler.load(Compiler.java:4972)
   at clojure.lang.Compiler.loadFile(Compiler.java:4939)
   at clojure.main$load_script__7405.invoke(main.clj:213)
   at clojure.main$script_opt__7442.invoke(main.clj:265)
   at clojure.main$main__7466.doInvoke(main.clj:346)
   at clojure.lang.RestFn.invoke(RestFn.java:441)
   at clojure.lang.Var.invoke(Var.java:367)
   at clojure.lang.AFn.applyToHelper(AFn.java:179)
   at clojure.lang.Var.applyTo(Var.java:476)
   at clojure.main.main(main.java:37)
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1048)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687)
   at com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1859)
   at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3593)
   at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2199)
   at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:784)
   at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:350)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
   at java.sql.DriverManager.getConnection(libgcj.so.10)
   at clojure.contrib.sql.internal$get_connection__218.invoke(internal.clj:85)
   at clojure.contrib.sql.internal$with_connection_STAR___226.invoke(internal.clj:102)
   at test.mysql$eval__386.invoke(mysql_test.clj:12)
   at clojure.lang.Compiler.eval(Compiler.java:4642)
   ...10 more

Ответы [ 3 ]

2 голосов
/ 31 января 2010

Я перешел на Sun JDK6 вместо GIJ.

Я получил сообщение "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи". Я нашел эту ветку , которая мне очень помогла.

Я добавил опцию "-Djava.net.preferIPv4Stack = true", и теперь она отлично работает.

Спасибо всем!

1 голос
/ 07 августа 2012

У меня была точно такая же проблема, только я использовал Java. Я нашел этот пост, и описанное там решение сработало для меня.

Хитрость заключалась в том, чтобы добавить "useJvmCharsetConverters = true" в конец строки подключения.

0 голосов
/ 30 января 2010

код выглядит очень похоже на (предположительно работающий) код в Этот вопрос
возможно проблема в версии clojure-contrib.

когда я макрорасширяю код из этих двух вопросов, они появляются одинаково, так что, похоже, проблема не в содержимом mysql_test.clj.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...